Wie wählt man Zeilen in MS SQL basierend auf Spaltenwerten aus?
443
Tech Sawi
Ich möchte SourceId & Currency basierend auf dem Count-Wert auswählen. Problem ist innerhalb einer Gruppe. Ich muss alle Daten ignorieren, bei denen Count = 0 ist, wenn ein Wert größer als 0 ist. Wenn jedoch alle Zählungen 0 in einer Gruppe sind, müssen alle Werte berücksichtigt werden.
Ich habe Aggregatfunktionen ausprobiert, die Daten auf verschiedene Arten gruppieren, aber nichts scheint zu funktionieren. Ich verwende SQL 2008, wenn das hilft.
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)
1 Antwort auf die Frage
0
Tech Sawi
Endlich eine Lösung für mein Problem gefunden, funktioniert es für mein Problem, das ich oben gepostet habe
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