복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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

  5. from https://stackoverflow.com/questions/16517298/conditional-sum-in-group-by-query-mssql by cc-by-sa and MIT license