Sql server I';我正在尝试实现pivotsql
这是我第一次尝试做pivot,但即使所有信息都在网上,我还是没用:( 我有这张桌子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 | +-----+-----------------+------------+ 这张桌子呢 +-----
+-----+-----------------+------------+
| 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