我正在尝试创建一个选择查询,如果值为 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/