我想根据计数值选择SourceId和Currency。问题在于集合中,如果有任何大于0的值,我将忽略Count = 0的所有数据,但是如果组中所有计数均为0,则需要考虑所有值。
Id(PK) SourceId SourceValue Currency Count Remarks
1 1000001 ABC EUR 70000 Pick this
2 1000002 ABC EUR 0 Ignore
3 1000003 ABC EUR 0 Ignore
4 1000002 ABC EUR 0 Ignore
5 1000003 ABC EUR 40 Pick this
6 1000001 ABC EUR 10 Pick this
7 1000004 ABC GBP 2000 Pick
8 1000004 ABC GBP 200 Pick
9 1000005 ABC USD 2000 Only pick this
Id(PK) SourceId SourceValue Currency Count Remarks
1 1000001 ABC EUR 0 Pick
2 1000002 ABC EUR 0 Pick
3 1000003 ABC EUR 0 Pick
4 1000002 ABC EUR 0 Pick
5 1000003 ABC EUR 0 Pick
6 1000001 ABC EUR 0 Pick
7 1000004 ABC GBP 2000 Pick
8 1000004 ABC GBP 200 Pick
9 1000005 ABC USD 2000 Only pick this
我尝试了聚合函数,以不同的方式对数据进行分组,但是似乎没有任何效果。如果有帮助,我正在使用SQL 2008。
IF OBJECT_ID ('Tempdb..#TempTab') IS NOT NULL BEGIN DROP TABLE #TempTab END
CREATE TABLE #TempTab (Id int IDENTITY (1,1), SourceId int, SourceValue varchar(10), Currency varchar(3), Volume int)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000001,'ABC','EUR',70)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000002,'ABC','EUR',0)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000003,'ABC','EUR',0)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000003,'ABC','EUR',40)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000001,'ABC','EUR',10)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000004,'ABC','GBP',200)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000004,'ABC','GBP',20)
INSERT INTO #TempTab(SourceId,SourceValue,Currency,Volume) VALUES(1000005,'ABC','USD',200)
最后找到我的问题的解决方案,它可以解决我上面发布的问题
SELECT *
FROM
(
SELECT T.Id,T.SourceId,T.Currency,T.Volume
,DENSE_RANK() OVER(PARTITION BY T.SourceValue,T.Currency ORDER BY T.TVol DESC) VolRank
FROM
(
SELECT t.*
,CASE
WHEN t.Volume <> 0 THEN '1'
ELSE '0'
END TVol
FROM #TempTab t
) T
) T
WHERE T.VolRank = 1 -- I'm interested in only those where ranking = 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句