我有一个名为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]
答案 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;