[英]SQL Query columns to rows - Unpivot?
自從我完成任何T-SQL以來已經有一段時間了。 我被困試圖獲取具有這種格式的表:
Table 1
Equipment Number Description Photo01 Photo02 Photo03 Photo04 Photo05
02M1.1 GRIT COLLECTOR BC1DE498-F222-404B-AF32-50886FD8524D.jpg 2E005CE8-2B72-4744-B707-4B5F9B3626E9.jpg 44888857-B8C1-41BC-BED1-D301FBF98C16.jpg NULL NULL
02M1.2 GRIT COLLECTOR 10C3E477-F7E5-49A8-8E86-2641B04A57D9.jpg A3E66016-EEBF-4543-972F-B04ABD753D0A.jpg NULL NULL NULL
看起來像這樣:
Table 2
EQNUM Filename Description
02M1.1 x:\Photos\BC1DE498-F222-404B-AF32-50886FD8524D.jpg GRIT COLLECTOR
02M1.1 x:\Photos\2E005CE8-2B72-4744-B707-4B5F9B3626E9.jpg GRIT COLLECTOR
02M1.1 X:\Photos\44888857-B8C1-41BC-BED1-D301FBF98C16.jpg GRIT COLLECTOR
02M1.2 X:\Photos\10C3E477-F7E5-49A8-8E86-2641B04A57D9.jpg GRIT COLLECTOR
02M1.2 X:\Photos\A3E66016-EEBF-4543-972F-B04ABD753D0A.jpg GRIT COLLECTOR
表1中可以有0-5張圖片。
我正在使用SQL 2008 R2。 我認為我必須使用UNPIVOT,但到目前為止還沒有成功。
任何幫助,將不勝感激。
如果您的表不是很大,那么最簡單的方法可能是顯式union all
:
select t.*
from (select eqnum, photo1 as photo, description from table1 union all
select eqnum, photo2, description from table1 union all
select eqnum, photo3, description from table1 union all
select eqnum, photo4, description from table1 union all
select eqnum, photo5, description from table1
) t
where photo is not null;
您可以添加一個into
子句來創建表。 此版本將讀取該表五次。 Unpivot效率更高,但是只有當您的表有些大時(比如說成千上萬的行或更多),這才真正有所作為。
您可以使用UNPIVOT函數將列轉換為行:
select EquipmentNumber,
FileName,
DESCRIPTION
from yourtable
unpivot
(
FileName
for Photo In (Photo01, Photo02, Photo03, Photo04, Photo05)
) u
參見演示 。
由於使用的是SQL Server 2005+,因此還可以使用“ CROSS APPLY
來轉置數據。 在必須使用UNION ALL版本之前,SQL Server 2008中提供了VALUES
子句:
select EquipmentNumber, FileName, DESCRIPTION
from yourtable
cross apply
(
values
('Photo01', Photo01),
('Photo02', Photo02),
('Photo03', Photo03),
('Photo04', Photo04),
('Photo05', Photo05)
) c (photo, FileName)
where FileName is not null;
觀看演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.