【问题标题】:T-SQL: calculate number of occurrences across columns and rowsT-SQL:计算跨列和行的出现次数
【发布时间】:2021-01-06 01:14:19
【问题描述】:

我有一张这样的桌子:

nr1 nr2 nr3 nr4 nr5 nr6 nr7 nr8 nr9 nr10
----------------------------------------
1   4   5   6   8   9   10  17  18  19
3   4   5   7   10  11  14  15  17  18
1   3   5   9   10  12  13  15  16  18
2   3   4   7   8   11  15  16  17  19
5   6   8   9   10  11  13  14  16  19
2   4   8   10  11  12  13  14  19  20
2   5   7   8   10  14  15  16  18  19
1   5   7   8   9   12  13  14  15  18
1   2   3   4   7   10  11  12  14  17
1   3   5   6   7   10  13  14  17  20

我想实现以下目标:

  1. 将所有这些数字放入仅包含一列的#TEMP 表中
  2. 统计所有数字出现的次数

我相信一旦 1 将所有数字都放在一列中,我可以轻松实现第二个。但我坚持第一项。如何将所有这些值放在 1 列中。

我尝试了 UNPIVOTing 但它不起作用,因为我做错了。

SELECT nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10
FROM table t
UNPIVOT
(
Number for nrs in ( nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10)
) AS u

【问题讨论】:

  • 看起来这是我想要的:SELECT x.AllNumbers, COUNT(*) AS Reps FROM NumbersTable CROSS APPLY (SELECT AllNumbers FROM (VALUES (nr1), (nr2), (nr3), (nr4), (nr5), (nr6), (nr7), (nr8), (nr9), (nr10)) AS t (AllNumbers)) x GROUP BY AllNumbers ORDER BY Reps DESC
  • 如果你在回答自己的问题,你应该把它作为一个答案。

标签: sql sql-server tsql count unpivot


【解决方案1】:

您不需要临时表。您可以使用cross apply 和values():

select x.nr, count(*) cnt
from mytable t
cross apply (values (nr1), (nr2), (nr3), ..., (nr10)) x(nr)
group by x.nr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多