[SQL] 쿼리 MSSQL에 의해 그룹에서 조건부 합계
SQL쿼리 MSSQL에 의해 그룹에서 조건부 합계
나는 다음과 같은 스키마와 테이블 OrderDetails의이 :
----------------------------------------------------------------
| OrderId | CopyCost | FullPrice | Price | PriceType |
----------------------------------------------------------------
| 16 | 50 | 100 | 50 | CopyCost |
----------------------------------------------------------------
| 16 | 50 | 100 | 100 | FullPrice |
----------------------------------------------------------------
| 16 | 50 | 100 | 50 | CopyCost |
----------------------------------------------------------------
| 16 | 50 | 100 | 50 | CopyCost |
----------------------------------------------------------------
나는 다음과 같은 스키마를 새 테이블로 위의 표를 추측하는 질의를 필요로한다 :
----------------------------------------------------------------
| OrderId | ItemCount | TotalCopyCost | TotalFullPrice |
----------------------------------------------------------------
| 16 | 4 | 150 | 100 |
----------------------------------------------------------------
현재 나는 항목 수에 Order.Id에 그룹으로 사용하고 있습니다. 하지만 조건부 CopyCost 및 FULLPRICE 값을 추측하는 방법을 모르겠어요.
어떤 도움이 많이 주시면 감사하겠습니다.
문안 인사 프레디
해결법
-
==============================
1.시험
시험
SELECT OrderId, COUNT(*) ItemCount, SUM(CASE WHEN PriceType = 'CopyCost' THEN Price ELSE 0 END) TotalCopyCost, SUM(CASE WHEN PriceType = 'FullPrice' THEN Price ELSE 0 END) TotalFullPrice FROM OrderDetails GROUP BY OrderId
SQLFiddle
-
==============================
2.이 쿼리
이 쿼리
select orderId, count(*) as cnt, sum(if(pricetype='CopyCost', CopyCost, 0)) as totalCopyCost, sum(if(pricetype='FullPrice', FullPrice, 0)) as totalFullPrice from tbl group by orderId
| ORDERID | CNT | TOTALCOPYCOST | TOTALFULLPRICE | -------------------------------------------------- | 16 | 4 | 150 | 100 |
-
==============================
3.당신은 사용할 수 있습니다 :
당신은 사용할 수 있습니다 :
SELECT OrderId, Count(1) as ItemCount, SUM(CASE WHEN PriceType = 'CopyCost' THEN CopyCost ELSE 0 END) AS TotalCopyCost, SUM(CASE WHEN PriceType = 'FullPrice' THEN FullPrice ELSE 0 END) AS TotalFullPrice FROM OrderDetails GROUP BY OrderId
-
==============================
4.당신은 또한 시도 할 수 ...
당신은 또한 시도 할 수 ...
select A.OrderID, A.ItemCount,B.TotalCopyCost, C.TotalFullPrice from (select OrderID, count(*) as ItemCount from orderdetails) as A, (select OrderID, sum(CopyCost) as TotalCopyCost from orderdetails where PriceType = 'CopyCost') as B, (select OrderID, sum(FullPrice) as TotalFullPrice from orderdetails where PriceType = 'FullPrice') as C where A.OrderID = B.OrderID
SQLFiddle : http://sqlfiddle.com/#!2/946af/6
from https://stackoverflow.com/questions/16517298/conditional-sum-in-group-by-query-mssql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 합니까 MS 액세스 지원 "CASE"절 ODBC와 연결하면? (0) | 2020.04.16 |
---|---|
[SQL] SSMS에서 빠른 쿼리 매우 코드에서 느리지 만 (0) | 2020.04.16 |
[SQL] 왜 사용 '*'뷰 나쁜 구축? (0) | 2020.04.16 |
[SQL] SQL 오류 : 키워드 '사용자'근처의 구문이 잘못되었습니다 (0) | 2020.04.16 |
[SQL] BigQuery의 SQL에서 지원 UNION 기능 (0) | 2020.04.16 |