2013-08-20 140 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

如果我理解正確的,你要添加一對夫婦代表收入爲每個配送中心的列 - 相同的,因爲它是與銷售的產品量完成。 如果是這樣,您需要更改您的收入定義併爲更多的數據透視提供附加說明列。

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] 

所有剩下的就是加樞:在上面查詢sum(Revenue) for <values in [RevenueDescription]> 和列,就像銷售金額。

希望它有幫助 - 我無法訪問Management Studio,因此無法檢查查詢是否100%正確。

PS。您可能會考慮更改數據模型。每個配送中心的產品價格單獨列對我來說看起來是個不好的主意 - 爲什麼不把它移動到單獨的表格(產品,分銷商,價格)?

相關問題