sql-server - Group By Count 和同一查询中的字段

标签 sql-server count group-by

我有一个包含 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/

相关文章:

sql-server - 按最新排序,但按另一个 ID 列放在一起

sql - 为每个交易品种选择前 2 个价格

python - 如何计算python3中大文本中排列(重叠)的出现次数?

python - 我如何计算 Django 中页面的访问量? (通过重定向)

php - 如何检查 mysql 搜索 JOIN 查询期间是否存在行?

sql - SQL Server 2012 中表名应如何限定?

sql-server - SQL 性能 : Recompile versus drop and re-apply for stored procedure

mysql 计算列表中的不同元素

Mysql查询-分组结果

mysql - 从每个品牌中选择前 2 名最畅销产品