열 값을 기준으로 MS SQL에서 행을 선택하는 방법은 무엇입니까?


2

카운트 값을 기준으로 SourceId 및 통화를 선택하고 싶습니다. 문제는 세트 내에 있습니다 .0보다 큰 값이 있으면 Count = 0 인 모든 데이터를 무시하지만 그룹 내 모든 카운트가 0이면 모든 값을 고려해야합니다.

샘플 1

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

샘플 2

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)

답변:


0

마침내 내 문제에 대한 해결책을 찾았습니다. 위에 게시 한 내 문제에 효과적입니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.