如何在SQL Server中基于不同的列重复行
我的表中有列如何在SQL Server中基于不同的列重复行,sql,sql-server,tsql,weekday,Sql,Sql Server,Tsql,Weekday,我的表中有列周一,周二,周三,周四和周五,它们是布尔型的,现在我想进行查询,将这些行转换为单列工作日。它应该告诉我哪一列的日期是正确的。您可以使用case。要在SQL Server中获取逗号分隔的列表,请执行以下操作: select t.*, stuff( ((case when Monday <> 0 then ',Monday' else '' end) + (case when Tuesday <> 0 then ',Tu
周一
,周二
,周三
,周四
和周五
,它们是布尔型的,现在我想进行查询,将这些行转换为单列工作日
。它应该告诉我哪一列的日期是正确的。您可以使用case
。要在SQL Server中获取逗号分隔的列表,请执行以下操作:
select t.*,
stuff( ((case when Monday <> 0 then ',Monday' else '' end) +
(case when Tuesday <> 0 then ',Tuesday' else '' end) +
. . .
), 1, 1, ''
) as weekdays
from t;
选择t.*,
stuff(((星期一0 then',星期一'else'结束时的情况)+
(如果星期二0,则“星期二”结束)+
. . .
), 1, 1, ''
)平日
从t;
我不知道如何指定“真”值。以上假设非零值为真。如前所述,SQL Server没有布尔类型,但它有一个
位
类型,它只能接受两个值,0和1。我假设您使用的是bit列。我还假设每行只选择一天。使用这两种假设,您只需要一个大小写
表达式:
SELECT
CASE WHEN Monday = 1 THEN 'Monday'
WHEN Tuesday = 1 THEN 'Tuesday'
WHEN Wednesday = 1 THEN 'Wednesday'
WHEN Thursday = 1 THEN 'Thursday'
WHEN Friday = 1 THEN 'Friday' END AS day_selected
FROM yourTable
注意:我想您指的是bit
类型,而不是只接受0
/1
的Boolean
数学方法可以是:
select
datename(weekday,
Monday + Tuesday*2 + Wednesday*3 + Thursday*4 + Friday*5 - 1) as weekDayName
from
t;
旁注:
datename(weekday, 0) => Monday
datename(weekday, 1) => Tuesday
datename(weekday, 2) => Wednesday
datename(weekday, 3) => Thursday
datename(weekday, 4) => Friday
datename(weekday, 5) => Saturday
datename(weekday, 6) => Sunday / datename(weekday, -1) => Sunday
SQL Server没有布尔类型。顺便说一句,SQL Server有一个布尔类型的位数据类型。非常感谢您的时间和关注,我还使用了另一种方法…做得好。应该是被接受的答案+1