sql - 如何返回两行联合和每行的计数?
问题描述
我正在尝试将 10 列放入一列,再将 10 个不同的列放入一个单独的列中,并为第三列中的每一对独特的夫妇计数。
到目前为止我有
UNION
(SELECT a_3 as x, a_4 as y FROM result)
....
UNION
(SELECT a_19 as x, a_20 as y FROM result)
这给了我一张如下表
| x | y |
---------
| a | 1 |
| a | 2 |
| b | 1 |
| b | 3 |
etc...
我想要这个,但是我还想要第三列计算每行出现的次数,如下所示
| x | y |count|
---------------
| a | 1 | 10 |
| a | 2 | 3 |
| b | 1 | 6 |
| b | 3 | 2 |
etc...
我也可以这样做:
select count(*) from (insert above union SQL)
但后来我只得到了表格的总数。
谢谢!
解决方案
看起来您的原始表格设计根本没有标准化。
代替多个联合查询,您可以使用CROSS APPLY
withTable Value Constructor
来简化查询
select x, y, count(*) as [count]
from [result] t
cross apply
(
values (a_1, a_2), (a_3, a_4), (a_5, a_6),
. . .
(a_19, a_20)
) v (x, y)
group by x, y
推荐阅读
- webpack - HMR 不适用于 vue 和 asp.net 核心
- javascript - setState 仅在 Array.map 函数中执行一次
- php - 选择器上的 PHP 逻辑问题
- azure-sql-database - C# 中的 Azure sql server 故障转移侦听器点
- php - 如何更改 Carbon 的 diffForHumans 格式
- office365 - ErrorItemNotFound - 在商店中找不到指定的对象
- assembly - 在汇编语言 irvine 库中传递参数
- c# - 从对象中获取特定属性
- spring - 为 CachingConnectionFactory 设置 SSL 连接
- java - 客户端应用程序如何找到服务器(Java)打开的动态选择的 TCP 端口?