如何选择不同列名的名称是指在表的一行中具有相同值的列的标题?

问题描述 投票:-3回答:2

表格如下:table name ='seat',列为'seat 1','seat 2','seat 3','seat 4','seat5'。

id | seat1 | seat2 | seat3 | seat4 | seat5 
 1 |   0   |   1   |   1   |   0   |   1
 2 |   1   |   1   |   0   |   1   |   0
 3 |   1   |   0   |   1   |   1   |   1

我需要一个SQL查询,为我提供以下查询。当id = 1时,输出将是

seat2, seat3, seat5

如果id = 2,则输出为

seat1, seat2, seat4

如果id = 3则输出为

seat1, seat3, seat4, seat5
mysql sql
2个回答
1
投票

根据我的理解,你正在寻找只占用的座位。我基于这种理解准备了以下查询。请评论是否存在理解上的差距:

select * from 
(
select 'seat1', seat1 as occupiedStatus from [table]
union
select 'seat2', seat2 as occupiedStatus from [table]
union
select 'seat3', seat3 as occupiedStatus from [table]
union
select 'seat4', seat4 as occupiedStatus from [table]
union
select 'seat5', seat5 as occupiedStatus from [table]
) seatsPivot
where occupiedStatus = 1 ;

1
投票

你的意思是这样的吗?如果没有帮助我理解,我可以调整查询逻辑...

  SELECT
        'Occupied Seats = {' +
        CASE WHEN seat1 = 1 THEN '1, ' ELSE '0, ' END +
        CASE WHEN seat2 = 1 THEN '1, ' ELSE '0, ' END +
        CASE WHEN seat3 = 1 THEN '1, ' ELSE '0, ' END +
        CASE WHEN seat4 = 1 THEN '1, ' ELSE '0, ' END +
        CASE WHEN seat5 = 1 THEN '1}' ELSE '0}' END 
    FROM seats 
    WHERE 1 IN (seat1,seat2,seat3,seat4,seat5)
© www.soinside.com 2019 - 2024. All rights reserved.