我有一个包含 3 列的表 (MyTable);数字、行、金额。
如果 Number 在 3 个以上的记录中相同,我想返回按 Number 分组的这些记录。否则,我想要按数字和行分组的所有其他记录。
这就是我到目前为止所得到的。它给出了一个错误,因为 Line 需要在聚合函数中
select * (
select Number, (case when count(Line) > 3 then -1 else Line end) as Line2, sum(Amount)
from MyTable
group by Number, Line2
) as x
order by x.Number
MyTable 看起来像这样:
Number Line Amount
------------------------
1 1 100
1 1 100
1 2 200
1 2 200
2 1 150
2 1 150
3 1 300
3 2 350
我希望结果看起来像这样:
Number Line2 Amount
------------------------
1 -1 600 <- More than 3 lines
2 1 300 <- Grouped by Line
3 1 300
3 2 350
最佳答案
试试这个:
SELECT Number, -1 AS Line, SUM(Amount) AS Amount
FROM mytable
GROUP BY Number
HAVING COUNT(*) > 3
UNION
SELECT Number, Line, SUM(Amount) AS Amount
FROM mytable
WHERE Number NOT IN (SELECT Number
FROM mytable
GROUP BY Number
HAVING COUNT(*) > 3)
GROUP BY Number, Line
关于sql-server - Group By Count 和同一查询中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36079770/