2013-11-04 135 views
0

我有以下數據的表:拆分值成列

subitem, subitempart, subitemvalue 
'Badge", 'Issued to', 'abc' 
'Badge', 'Located at', 'bcd' 
'Badge, 'signed for', 'def' 
'key', 'number', '123' 
'key', 'Issued to', 'abc' 

的subitempart名稱是從一個單獨的表具有兩個字段:[代碼]和[描述]。 子項目可以有1到20個子項目,每項不同。

我的客戶希望看到這個如下:

[Subitem], [Issued to], [Located at], [Signed for], [Number] 
'Badge' , 'abc'  , 'bcd'  , 'def'  , NULL 
'key' , 'abc'  , NULL  , NULL  , '123' 

所以我想要做的,是把提供給列的所有subitemparts,然後把這些值在正確的領域,然後刪除在列每行都空着。

這是可能的MS SQL,如果是的話,如何?

在此先感謝您的幫助。

rg。 埃裏克

+0

埃裏克嗨,試圖給看看這個http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx – Raphael

+0

你好謝謝。事實上,我確實看過那個頁面,但不能將它與我的具體問題聯繫起來。 – Eric

+0

等一下,我給你寫一個例子,告訴你如何將它與你的問題聯繫起來;) – Raphael

回答

0

看起來像你試圖擺動你的結果。一種選擇是使用PIVOT命令。我的理解是更好的使用MAXCASE雖然:

select subitem, 
    max(case when subitempart = 'Issued to' then subitemvalue end) IssuedTo, 
    max(case when subitempart = 'Located at' then subitemvalue end) LocatedAt, 
    max(case when subitempart = 'signed for' then subitemvalue end) SignedFor, 
    max(case when subitempart = 'number' then subitemvalue end) number 
from yourtable 
group by subitem 
+0

嗨,謝謝,但是可以通過添加新的或刪除舊的子表來改變子表的內容。我不想在每次發生時都編輯查詢,所以我需要一個更動態的解決方案。 – Eric

0

您可以將數據透視表,在SQL它並不難。

SELECT * FROM item 
PIVOT (max(subitemvalue) 
    for subitempart in ([Issued to],[Located at],[signed to],[number])) as items 

希望這有助於

+0

謝謝,但我怎樣才能使它更具活力。我希望查詢也可以在用戶添加新的subitempart時起作用。 – Eric

+1

這是有點棘手檢查這個帖子http://stackoverflow.com/questions/11985796/sql-server-pivot-dynamic-columns-no-aggregation這是它是如何工作的,我們使用這種方法來做動態數據透視 – Raphael