sql - 获取值为 true 的位列的列名

标签 sql sql-server coldfusion sql-server-2008-r2

我正在尝试创建一个选择查询,如果值为 TRUE 或 1,它将返回位列的名称。我能做到这一点的唯一方法是添加一个附加列“Day”并具有该列的描述day 反射(reflect)可用票证可用的列名称。

我该怎么做?

<cfquery name="getTickets" datasource="test">
SELECT * from tickets
ORDER BY ticketID ASC
</cfquery> 

门票表(解决方法):

ticketID  Monday Tuesday Wednesday Price  Day

1         1      0       0         42.00  Monday
2         0      1       0         42.00  Tuesday
3         0      0       1         42.00  wednesday
4         1      1       1         75.00  All three days

门票表(我想使用的):

ticketID  Monday Tuesday Wednesday Price

1         1      0       0         42.00
2         0      1       0         42.00
3         0      0       1         42.00
4         1      1       1         75.00

最佳答案

我强烈建议您在表示层(即客户端)中执行此操作。然而,这是一种可能性。

示例数据

create table Tickets(ticketID int, Monday bit, Tuesday bit, Wednesday bit, Price money);
insert into Tickets values (1, 1, 0, 0, 42.00);
insert into Tickets values (2, 0, 1, 0, 42.00);
insert into Tickets values (3, 0, 0, 1, 42.00);
insert into Tickets values (4, 1, 1, 1, 75.00);
insert into Tickets values (5, 0, 0, 0, 15.00);

可能的查询

select *,
       STUFF(
       case when Monday=1 then ',Monday' else '' end
     + case when Tuesday=1 then ',Tuesday' else '' end
     + case when Wednesday=1 then ',Wednesday' else '' end, 1,1,'')
from Tickets;

要美化边缘情况(“所有三天”和“无”),您可以使用 CASE 语句

select *,
       CASE WHEN Monday=1and Tuesday=1and Wednesday=1
            THEN 'All three days'
            WHEN Monday=0and Tuesday=0and Wednesday=0
            THEN 'None'
            ELSE
       STUFF(
       case when Monday=1 then ',Monday' else '' end
     + case when Tuesday=1 then ',Tuesday' else '' end
     + case when Wednesday=1 then ',Wednesday' else '' end, 1,1,'')
            END WhichDays
from Tickets;

关于sql - 获取值为 true 的位列的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16596275/

相关文章:

coldfusion - cfdocument 防止在行中分页

regex - 从字符串中删除 HTML 的最佳方法是什么?

coldfusion - 有没有办法将数据库中的每一行的值放入数组中?

mysql - 使用 where 子句左连接三个表

c# - 我正在尝试使用 SQL 语句中下拉菜单中的 selectedItem 来填充 C# asp.net 中的文本框

mysql - MySQL触发错误

sql - EF数据库第一代代码生成缺失Key和数据注解

SQL Server Rank() 按组

sql - 不使用游标填充行中缺失的数据

php - SQL 从链接表中检索名称和服务并按匹配的服务数排序