如何将行转换为列

时间:2018-05-24 09:20:57

标签: sql-server

我有一个名为Shift的表,我使用下面提到的列在此表中定义OffDays。

   CREATE TABLE [tbl_Shift](

    [OffDay1] [nvarchar](25) NOT NULL CONSTRAINT [DF_tbl_Shift_OffDay1]  DEFAULT (N'Sunday'),
    [IsAlternateOffDay2] [bit] NULL,
    [OffDay2] [nvarchar](25) NULL
    )

INSERT INTO [tbl_Shift] VALUES ('Sunday', 'True', 'Saturday')

AlternateOffDay是位,如果它是True,则可以定义OffDay2。 如果星期六有OffDay2,我希望结果显示如下。

Holidays 
----------
Sunday 
Saturday

我试过这个,但结果出现在2列和1行中,如果第一个不为空,它也会跳过第2个,但这不是问题。我只想让它们分成2行。

Select DISTINCT ISNULL(OffDay1,OffDay2) from [HRM].[tbl_Shift]

1 个答案:

答案 0 :(得分:1)

在这种情况下,最简单的解决方案是使用UNION(隐式执行DISTINCT):

(简化,只需添加任何WHERE子句,例如忽略未设置标志的OffDay2)

SELECT OffDay1 FROM [HRM].[tbl_Shift]
UNION
SELECT OffDay2 FROM [HRM].[tbl_Shift]

或者,您可以查看用于将列值切换为多行的UNPIVOT。像这样:

SELECT DISTINCT TheDay
FROM   
   (SELECT OffDay1, OffDay2  
   FROM tbl_Shift) p  
UNPIVOT  
   (TheDay FOR EachDay IN   
      (OffDay1, OffDay2)  
)AS unpvt;