2013-08-20 3 views
0

나는 위대한 작품을 다음 쿼리를 가지고 있지만, 나는 또한 물류 센터에 따라 다른 가격을 가지고있는 각 제품 (이름)의 수익을 결정하려면 : 당신으로SQL CASE 제품 가격

SELECT NAME, 
     ISNULL([UK - BOLTON], 0) [UK Website], 
     ISNULL([USA - FLORIDA], 0) [USA Website], 
     ISNULL([CANADA], 0)  [Canada Website], 
     ISNULL([AUSTRALIA], 0)  [Australia Website], 
     ISNULL([AMAZON (USA)], 0) [Amazon (USA)], 
     ISNULL([AMAZON (UK)], 0) [Amazon (UK)], 
     ISNULL([AMAZON (FR)], 0) [Amazon (FR)], 
     ISNULL([AMAZON (CA)], 0) [Amazon (CA)], 
     ISNULL([AMAZON (JP)], 0) [Amazon (JP)] 
FROM (SELECT p.NAME, 
       ps.UNITSSOLD, 
       CASE 
       WHEN dc.[DESCRIPTION] = 'UK Website' THEN p.UKWEBPRICE 
       END Revenue, 
       dc.[DESCRIPTION] 
     FROM DBO.PRODUCTSALES ps 
       INNER JOIN DBO.PRODUCT p 
         ON ps.PRODUCTID = p.PRODUCTID 
       INNER JOIN DBO.DISTRIBUTIONCENTRE dc 
         ON ps.DISTRIBUTIONCENTREID = dc.DISTRIBUTIONCENTREID 
     WHERE ps.ORDERDATE >= CONVERT(DATETIME, '2013-08-01 00:00:00', 102) 
       AND ps.ORDERDATE <= CONVERT(DATETIME, '2013-08-20 00:00:00', 102) 
       AND p.PRODUCTCLASSIFICATIONID = 2) [SourceTable] 
     PIVOT (SUM(UNITSSOLD) 
      FOR [DESCRIPTION] IN ([UK - Bolton], 
            [USA - Florida], 
            [Canada], 
            [Australia], 
            [Amazon  (USA)], 
            [Amazon (UK)], 
            [Amazon (FR)], 
            [Amazon (CA)], 
            [Amazon (JP)])) AS PIVOTTABLE 

을 내가 CASE/WHEN을 사용하려고 시도했음을 볼 수는 있지만 어떻게해야하는지 혼란 스럽다. 기본적으로 영국 - 볼튼은 각 유통 센터에 대한 제품 테이블 (p) 등에서 UKWebPRice를 가져와야하며 수익이기 때문에 각 센터에 대해 UnitsSold * UKWebPrice 등이됩니다.

희망적입니다. 이 판매 된 제품의 양 이루어졌다과 동일한 -

감사합니다,

+0

우리가 당신을 도우 려 시도 할 수 있도록 약간의 샘플 데이터와 몇 가지 설명을 추가 할 수 있습니까? 더 좋게, SQL 피들에 대한 예제를 설정하면 진행 상황을 이해할 수 있습니다 – Gidil

+0

이 예제를 확인할 수 있습니다 ... ......하지만 네가 뭘하고 있는지 알기가 어렵다. 일부 DDL 및 샘플 데이터를 게시하십시오. 추측 제안 : http://stackoverflow.com/questions/15235320/sql-server-case-statements/15235415#15235415 – granadaCoder

답변

0

만약 내가 제대로 이해하고

마이크, 각 물류 센터에 대한 수익을 나타내는 열 몇 가지를 추가하고 싶습니다. 그렇다면 수익 정의를 변경하고 추가 피벗에 대한 추가 설명 열을 제공해야합니다. 다만 판매 금액으로 상위 쿼리에서 sum(Revenue) for <values in [RevenueDescription]> 과 열 : 모든 것은이 남아

ps.UnitSold * CASE WHEN dc.[DESCRIPTION] = 'UK Website' THEN p.UKWEBPRICE 
       -- WHEN dc.[DESCRIPTION] = 'USA Website' then p.USAWEBPRICE 
       -- ... 
END Revenue, 
'S'+dc.[DESCRIPTION] as [RevenueDescription] 

는 피벗을 추가하는 것입니다.

희망이 있습니다. Management Studio에 대한 액세스 권한이 없으므로 쿼리가 100 % 정확한지 확인할 수 없습니다.

추신. 데이터 모델 변경을 고려할 수 있습니다. 각 물류 센터의 제품 가격에 대한 별도의 열은 나에게 나쁜 생각처럼 보입니다. 왜 제품을 별도의 테이블 (제품, distr_centre, 가격)으로 옮기지 않습니까?

관련 문제