Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中基于不同的列重复行_Sql_Sql Server_Tsql_Weekday - Fatal编程技术网

如何在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