2017-05-03 139 views
-4

我有以下格式SQL樞軸2列

Table View

的表,我認爲我的問題是不是可能重複的問題有點獨特,而我試圖讓重複的201601 ... 201652兩個度量指標和成本的列。

+3

[轉換行,以使用SQL Server「支點」列(可能的複製http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot -in-sql-server) – Ben

+0

你在用什麼數據庫? – Taryn

+0

我正在使用SQL Server 12 – user2827224

回答

0

這是一種適用於任何不依賴專有PIVOT()函數的數據庫(包括SQL Server)的方法。在這樣的例子中,這樣做有點奇怪,在52周的時間裏,(並且,實話告訴你,105個結果列並不是真正的人類閱讀報告的最佳輸出)。 話雖如此,在這個例子中,我做了一年的四分之一而不是幾周,你只需要重複表達52次而不是4次。 實際上,您可以使用perl或Visual Basic或任何您喜歡的來生成語句。 這裏所說:

-- the input table, don't use in real query ... 
WITH 
input(id,quarter,orders,cost) AS (
      SELECT 1,201601,200,1000 
UNION ALL SELECT 1,201602,300,1500 
UNION ALL SELECT 1,201603,330,1800 
UNION ALL SELECT 1,201604,500,2500 
) 
-- end of input - 
SELECT 
    id 
, SUM(CASE quarter WHEN 201601 THEN orders END) AS "orders_201601" 
, SUM(CASE quarter WHEN 201602 THEN orders END) AS "orders_201602" 
, SUM(CASE quarter WHEN 201603 THEN orders END) AS "orders_201603" 
, SUM(CASE quarter WHEN 201604 THEN orders END) AS "orders_201604" 
, SUM(CASE quarter WHEN 201601 THEN cost END) AS "cost_201601" 
, SUM(CASE quarter WHEN 201602 THEN cost END) AS "cost_201602" 
, SUM(CASE quarter WHEN 201603 THEN cost END) AS "cost_201603" 
, SUM(CASE quarter WHEN 201604 THEN cost END) AS "cost_201604" 
FROM input 
GROUP BY id; 

id|orders_201601|orders_201602|orders_201603|orders_201604|cost_201601|cost_201602|cost_201603|cost_201604 
1|   200|   300|   330|   500|  1,000|  1,500|  1,800|  2,500