将多个查询结果合并为一行并添加列

时间:2014-09-10 22:25:44

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

我已经广泛搜索过这种类型的分辨率,但却找不到任何可行的方法。

这是我的数据:

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.它确实需要是动态的,因为项目的数量可能会有所不同。如果在视图/查询中可能出现这种情况,那将是最好的。

由于

1 个答案:

答案 0 :(得分:1)

SQL Fiddle

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) |