我正在尝试显示my table的列名,如果它的值为1
| A | B | C | D |
| 0 | 1 | 1 | 0 |
在这种情况下,我想得到结果:
| Column |
| B |
| C |
我编写了以下查询,但它无效:
SHOW COLUMNS
FROM `questions`
WHERE VALUES=`1`
答案 0 :(得分:2)
如果您只需要包含值= 1的列的列表,则应该能够使用以下查询:
select col
from
(
select col,
case s.col
when 'A' then A
when 'B' then B
when 'C' then C
when 'D' then D
end AS val
from yourtable
cross join
(
select 'A' AS col union all
select 'B' union all
select 'C' union all
select 'D'
) s
) s
where val = 1;
见SQL Fiddle with Demo。这将使用包含列名称(A
,B
等)的虚拟表来取消对列的拆分,然后只返回包含值1的列名称。此技术的信用转到@Andriy M