【发布时间】:2021-11-29 23:52:03
【问题描述】:
我在 SQL Server 中有一个表,我已按 ID 对其进行分组,并创建了 2 个包含其他数据计数的新列。我希望能够同时创建另一列,如果两列中的计数都大于数字,则显示 1,否则将显示 2。但是当我尝试它时,它说无效的列名,我猜是我的计数列不在原始表中?
我的数据类似于:
ID Data1 Data2
-------------------------
0 1 1 5
1 1 2 5
2 1 5 8
3 1 7 9
4 2 8 5
5 2 7 3
6 2 9 2
7 3 3 1
8 3 3 6
9 3 2 7
10 3 6 3
11 3 8 0
所需的输出(如果 >= 4,则代码为 1,否则为 2):
ID CountData1 CountData2 Code
------------------------------------
0 1 4 4 1
1 2 3 3 2
2 3 5 5 1
当前查询:
SELECT
ID,
COUNT(Data1) AS CountData1,
COUNT(Data2) AS CountData2,
(CASE WHEN (CountData1 >= 4 and CountData2 >= 4) THEN 1 ELSE 2 END) AS Code
FROM
Table
GROUP BY
ID
【问题讨论】:
-
您不能在同一个选择列表中使用它们。要么重复 count(),要么使用派生表(子查询)。
标签: sql sql-server tsql group-by case