Sql server I';我正在尝试实现pivotsql

Sql server I';我正在尝试实现pivotsql,sql-server,sql-server-2008,sql-server-2005,pivot,Sql Server,Sql Server 2008,Sql Server 2005,Pivot,这是我第一次尝试做pivot,但即使所有信息都在网上,我还是没用:( 我有这张桌子 +-----+-----------------+------------+ | ID | ChecklistItemID | Attachment | | 327 | 912 | 611 | | 328 | 912 | 612 | +-----+-----------------+------------+ 这张桌子呢 +-----

这是我第一次尝试做pivot,但即使所有信息都在网上,我还是没用:(

我有这张桌子

+-----+-----------------+------------+
| ID  | ChecklistItemID | Attachment |
| 327 | 912             | 611        |
| 328 | 912             | 612        |
+-----+-----------------+------------+
这张桌子呢

+-----+----------+
| ID  | FileName |
| 611 | 2.jpg    |
| 612 | 3.jpg    |
+-----+----------+
我希望我的输出是这样的

+-----------------+-------+-------+
| ChecklistItemID | File1 | File2 |
| 912             | 2.jpg | 3.jpg |
+-----------------+-------+-------+

有人能帮忙吗?

这似乎很管用。我把它留了下来,因为你没有说你是为了所有的数据还是为了一个特定的清单

诀窍是使用
行编号()
获取
文件
列的已知名称:

declare @t1 table (ID int not null,ChecklistItemID int not null,Attachment int not null)
insert into @t1(ID,ChecklistItemID,Attachment) values
(327,912,611),
(328,912,612)

declare @t2 table (ID int not null, FileName varchar(9) not null)
insert into @t2(ID,FileName) values
(611,'2.jpg'),
(612,'3.jpg')

;With Ordered as (
    select
        t1.ChecklistItemID,
        FileName,
        'File' + CONVERT(varchar(5),ROW_NUMBER() OVER (PARTITION BY t1.ChecklistItemID
                                     ORDER BY t2.ID)) as FileTitle
    from
        @t1 t1
            inner join
        @t2 t2
            on
                t1.Attachment = t2.ID
)
select
    *
from
    Ordered
        pivot (MIN(FileName) for FileTitle in (File1,File2,File3)) u
结果:

ChecklistItemID File1     File2     File3
--------------- --------- --------- ---------
912             2.jpg     3.jpg     NULL
输出

ChecklistItemID File1   File2
-----------------------------
912             2.jpg   3.jpg

“输入”是什么对于您的查询?例如,您是否尝试对所有数据执行此操作,或者是否提供了特定的ChecklistItemID或
ID
s列表等。此外,可能涉及的文件数量是否有限制?我认为您的示例数据有问题。
ChecklistItemID
12仅连接到两个附件中的一个抱歉,我已经编辑了它。每个ChecklistItemID最多有3行。ID是自动递增的。最多涉及3个文件。可能是3行或更少
ChecklistItemID File1   File2
-----------------------------
912             2.jpg   3.jpg