首页 > 解决方案 > 如何返回两行联合和每行的计数?

问题描述

我正在尝试将 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)

但后来我只得到了表格的总数。

谢谢!

标签: sqlsql-servertsqlcountunion

解决方案


看起来您的原始表格设计根本没有标准化。

代替多个联合查询,您可以使用CROSS APPLYwithTable 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

推荐阅读