簡體   English   中英

SQL查詢列到行-不可透視?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM