将字段中的值拆分为列

时间:2013-11-04 13:27:39

标签: sql sql-server sql-server-2008

我有一张包含以下数据的表格:

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

子网站名称来自一个单独的表,其中包含两个字段:[code]和[description]。 子项目可以有1到20个子网站,每个项目都有所不同。

我的客户希望看到如下:

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

所以我想做的是,将所有子网站都放在列中,然后将值放在正确的字段中,然后删除每行上为空的列。

这在MS SQL中是否可行,如果可以,怎么做?

提前感谢您的帮助。

RG。 埃里克

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你可以使用数据透视表,在sql中并不困难。

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

希望这会有所帮助