我如何 return 两行联合和每行的计数?

How do I return two lines of unions and a count for each row?

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

这给了我一个table如下

| 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)

但后来我得到了 table 的总数。

谢谢!

SELECT X,Y,COUNT(1) AS[COUNT] FROM
(
 SELECT a_3 as x, a_4 as y FROM result
 ....
 UNION
 SELECT a_19 as x, a_20 as y FROM result
) x
GROUP BY X,Y

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

可以使用CROSS APPLYTable 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