2014-04-16 20 views
0

我有3個表ArtNrYearPrice數據庫歲及表

`select * from database` 

數據庫會給這樣的事情

ArtNr  - Year - Price 
------------------------  
6- 2011 - 100 
6- 2012 - 110 
6- 2013 - 105 
604560001 - 2012 - 250 
604560001 - 2013 - 225 

我怎樣才能像

ArtNr  - 2011 - 2012 - 2013 
------------------------------  
6- 100 - 110 - 105 
604560001 - NULL - 250 - 225 
結果
+0

這樣的transormation被稱爲'透視table' 。如何實現這一點取決於您的數據庫系統。你在用哪個? – SebastianH

+0

嗨,我使用MS SQL服務器2008 – Droptopper

回答

0
SELECT ArtNr, 
     MIN(CASE WHEN Year = 2011 THEN Price END) Year2011, 
     MIN(CASE WHEN Year = 2012 THEN Price END) Year2012, 
     MIN(CASE WHEN Year = 2013 THEN Price END) Year2013 
FROM YourTable 
GROUP BY ArtNr 
+0

是的,只要每個'ArtNr'和'Year'組合都只有一行,就應該可以工作。 – SebastianH

+0

如果我使用這樣的選擇,我將不得不每年更改查詢......我更期待未來幾年的查詢:D – Droptopper

+0

@ user3541595然後快速搜索「sql-server dynamic pivot」在這裏,你會得到數百個答案處理這個 – Lamak

0

這裏需要一個數據透視表(在access/excel中被稱爲'crosstab')。我們可以用一些病例陳述來硬編碼選擇,以涵蓋固定的年數,但是每增加或刪除一年,這個解決方案就不得不重新審視。 @拉馬克在下面有這樣一個解決方案。或者,如果我有能力(而且我從不這樣做),我會切換數據庫引擎。這裏有三個DB引擎,用於創建數據透視表提供的工具: