我已经广泛搜索过这种类型的分辨率,但却找不到任何可行的方法。
这是我的数据:
Table1
co_num | item id
L11400 | widget1
L11400 | widget2
L11400 | widget3
L11401 | widget1
L11401 | widget2
我想查询表并返回如下数据:
co_num | itemid1 | itemid2 | itemid3
L11400 | widget1 | widget2 | widget3
L11401 | widget1 | widget2 | (blank)
这可能吗?我正在使用SQL 2008.它确实需要是动态的,因为项目的数量可能会有所不同。如果在视图/查询中可能出现这种情况,那将是最好的。
由于
答案 0 :(得分:1)
MS SQL Server 2008架构设置:
查询1 :
DECLARE @TABLE TABLE(co_num VARCHAR(20),itemid VARCHAR(20))
INSERT INTO @TABLE VALUES
('L11400','widget1'),
('L11400','widget2'),
('L11400','widget3'),
('L11401','widget1'),
('L11401','widget2')
SELECT *
FROM (
SELECT *
,'ItemID' + CAST(ROW_NUMBER() OVER (PARTITION BY co_num
ORDER BY itemid) AS VARCHAR(10)) Items
FROM @TABLE
) t
PIVOT (MAX(itemid)
FOR Items
IN ([ItemID1],[ItemID2],[ItemID3])
)p
<强> Results 强>:
| CO_NUM | ITEMID1 | ITEMID2 | ITEMID3 |
|--------|---------|---------|---------|
| L11400 | widget1 | widget2 | widget3 |
| L11401 | widget1 | widget2 | (null) |