Sam*_*Sam 6 sql sql-server-2008
我有table A
五行和以下值:
Column1 Column2 Column3 Column4
------- ------- ------- -------
anna ben cat d
anna ben cat e
anna ben cat f
gina hugh ken m
gina hugh ken p
Run Code Online (Sandbox Code Playgroud)
我想添加另一个名为 的列Column5
。Column 5
前 3 行的值为3,后 2 行的值为 2:
Column1 Column2 Column3 Column4 Column5
------- ------- ------- ------- -------
anna ben cat d 3
anna ben cat e 3
anna ben cat f 3
gina hugh ken m 2
gina hugh ken p 2
Run Code Online (Sandbox Code Playgroud)
我是怎么做到的:
SELECT DISTINCT COUNT (DISTINCT t1.Column4) AS Column5,
Column1, Column2, Column3, Column4
FROM TableA AS t1
GROUP BY Column1, Column2, Column3;
Run Code Online (Sandbox Code Playgroud)
这不起作用:
消息 8120,级别 16,状态 1,过程 COUNT,第 29 行 列
“Column4”在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。
有什么帮助吗?非常感激。
PS:如果我添加Column4
group by 子句,我在结果表中只得到“1”值Column5
。
另一种方法是首先选择不同的行,然后应用窗口 COUNT() 函数:
WITH distinctrows AS (
SELECT DISTINCT
Column1,
Column2,
Column3,
Column4
FROM TableA
)
SELECT
Column1,
Column2,
Column3,
Column4,
COUNT(Column4) OVER (PARTITION BY Column1, Column2, Column3) AS Column5
FROM distinctrows
;
Run Code Online (Sandbox Code Playgroud)