我有一张包含以下数据的表格:
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。 埃里克
答案 0 :(得分:0)
看起来你正试图转动结果。一种选择是使用PIVOT
命令。我最好使用MAX
和CASE
来理解它:
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
希望这会有所帮助