T-SQL 基于组标准的条件最大值或总和
T-SQL Conditional Max or Sum based on group criteria
我还没弄明白,我想找出最有效的方法。我有这个table(显示部分记录):
prefix FolioNumber CmmtAmount CmmtNumber
------- ----------- ---------- ----------
100981 10098100005 1 100981100
100981 10098100006 3 100981100
100981 10098100007 9 100981100
100981 10098100009 2 100981100
100981 10098100010 6 100981100
600499 60049900001 0 NULL
600499 60049900003 2 600499300
600499 60049900004 5 600499500
从那个 table 我需要得出这个结果集:
prefix CmmtAmount
------ ----------
100981 9
600499 7
逻辑是这样的:
对于每个前缀:
- 如果有多个但相同的 CmmtNumber 条记录,请选择
一个最大(CmmtAmount)
- 如果有多个但不同的CmmtNumber条记录,
显示所有这些记录的 SUM(CmmtAmount)。
我一直在查看 OVER/PARTITION 但无法提出正确的查询。请帮忙!谢谢
使用CASE WHEN
:
select
prefix,
case when min(CmmtNumber) = max(CmmtNumber) then max(CmmtAmount)
else sum(CmmtAmount)
end as CmmtAmount
from mytable
group by prefix
order by prefix;
我不确定,如果我完全理解您的要求,但我会试一试:
SELECT Prefix, MAX(CmmtAmount)
FROM YOUR_TABLE
GROUP BY Prefix
HAVING MIN(CmmtNumber)=MAX(CmmtNumber)
UNION
SELECT Prefix, SUM(CmmtAmount)
FROM YOUR_TABLE
GROUP BY Prefix
HAVING MIN(CmmtNumber) != MAX(CmmtNumber)
希望这对你有用。
我还没弄明白,我想找出最有效的方法。我有这个table(显示部分记录):
prefix FolioNumber CmmtAmount CmmtNumber
------- ----------- ---------- ----------
100981 10098100005 1 100981100
100981 10098100006 3 100981100
100981 10098100007 9 100981100
100981 10098100009 2 100981100
100981 10098100010 6 100981100
600499 60049900001 0 NULL
600499 60049900003 2 600499300
600499 60049900004 5 600499500
从那个 table 我需要得出这个结果集:
prefix CmmtAmount
------ ----------
100981 9
600499 7
逻辑是这样的:
对于每个前缀:
- 如果有多个但相同的 CmmtNumber 条记录,请选择 一个最大(CmmtAmount)
- 如果有多个但不同的CmmtNumber条记录, 显示所有这些记录的 SUM(CmmtAmount)。
我一直在查看 OVER/PARTITION 但无法提出正确的查询。请帮忙!谢谢
使用CASE WHEN
:
select
prefix,
case when min(CmmtNumber) = max(CmmtNumber) then max(CmmtAmount)
else sum(CmmtAmount)
end as CmmtAmount
from mytable
group by prefix
order by prefix;
我不确定,如果我完全理解您的要求,但我会试一试:
SELECT Prefix, MAX(CmmtAmount)
FROM YOUR_TABLE
GROUP BY Prefix
HAVING MIN(CmmtNumber)=MAX(CmmtNumber)
UNION
SELECT Prefix, SUM(CmmtAmount)
FROM YOUR_TABLE
GROUP BY Prefix
HAVING MIN(CmmtNumber) != MAX(CmmtNumber)
希望这对你有用。