2017-01-25 1 views
2

내 질문에 대한 실수를하면 Stackoverflow의 새 멤버입니다. (예 : 코딩 SQL의 새로운 기능입니다)"case when"절을 중복하지 않고 내부 조인 한 후에

조항의 금액 SUM을 얻으려고합니다. 여기에 내 테이블

TABLEA이다

UserID transid Brand Amount 
UserA 109974 MIX 960.00 --BrandMIX=A & B 
UserB 109975 B  894.00 
UserC 109976 C  350.00 
UserC 109977 MIX 300.00 --BrandMIX=C & D 

I는 내부가 a.soid = b.soid 때 i에서 표 A 및 표 B에 가입하려고

Row transid Brand 
1 109974 A 
2 109974 B 
3 109975 B 
4 109976 C 
5 109977 C 
6 109977 D 

TableB의 그것을 합친 결과, 표 b에서 transid가 중복되어 결과가 잘못되었습니다. 여기 내 코딩입니다. 내가
enter image description here

내가 TableB의에 ROW_NUMBER()을 추가

을 원하는
enter image description here

결과를 얻었다

SELECT UserID 
,CASE WHEN COUNT(DISTINCT(b.transid)) <> 0 THEN COUNT(DISTINCT(b.transid)) 
    ELSE NULL END) AS 'Frequency' 
,SUM(Amount) as 'TotalAmount' 
,YEAR(transdatetime) AS 'Year' 
,SUM (CASE [Brand] WHEN 'AA' THEN 1 ELSE 0 END) AS [BrandA] 
,SUM (CASE [Brand] WHEN 'BB' THEN 1 ELSE 0 END) AS [BrandB] 
,SUM (CASE [Brand] WHEN 'CC' THEN 1 ELSE 0 END) AS [BrandC] 
,SUM (CASE [Brand] WHEN 'DD' THEN 1 ELSE 0 END) AS [BrandD] 
,SUM (CASE [Brand] WHEN 'ZZ' THEN 1 ELSE 0 END) AS [BrandZ] 
FROM tableA a 
INNER tableB b ON a.transid = b.transid 
WHERE is_paid = 'N' 
GROUP BY UserID, YEAR(transdatetime) 

결과, 나는 WHEREMIN(ROW_NUMBER)이있다 SUM에 (금액) 원하는 불가능 해? 감사합니다. 고맙습니다.

답변

1

row_number 즉 (tableB의 행 열)에 따라 min (행) 값을 사용하도록 쿼리를 수정했습니다. 이것을 시도하십시오 ... 만약 이것이 작동하지 않는다면 완전한 테이블 구조를 게시하십시오.

SELECT UserID 
,CASE WHEN COUNT(DISTINCT(b.transid)) <> 0 THEN COUNT(DISTINCT(b.transid)) 
    ELSE NULL END AS 'Frequency' 
,SUM(Amount) as 'TotalAmount' 
,YEAR(transdatetime) AS 'Year' 
,SUM (CASE [Brand] WHEN 'AA' THEN 1 ELSE 0 END) AS [BrandA] 
,SUM (CASE [Brand] WHEN 'BB' THEN 1 ELSE 0 END) AS [BrandB] 
,SUM (CASE [Brand] WHEN 'CC' THEN 1 ELSE 0 END) AS [BrandC] 
,SUM (CASE [Brand] WHEN 'DD' THEN 1 ELSE 0 END) AS [BrandD] 
,SUM (CASE [Brand] WHEN 'ZZ' THEN 1 ELSE 0 END) AS [BrandZ] 
FROM tableA a 
INNER JOIN tableB b ON a.transid = b.transid 
WHERE is_paid = 'N' AND b.row in (select min(row) from tableB group by transid) 
GROUP BY UserID, YEAR(transdatetime) 
+0

대단히 감사합니다. 질문에서 올바르게 결과를 얻을 수 있습니다. – Rui

+0

btw, 답변을 어떻게 투표 할 수 있습니까? 나는 투표를 클릭했지만 아무런 변화가 없다. – Rui

+0

나는 그것이 당신을 도왔다 니 기쁘다. 그러나 당신이 upvote에 나는 당신의 명성이 최소한이어야한다고 생각한다. – balaji