我有几个带有行和列的表。在某些情况下有一个X,在某些情况下没有。现在,我想获得其中有X的所有行-列对。
SQL可能吗?可以通过其他方式实现吗?
我曾经有一个想法是使用case
,但我需要对所有col / row组合进行硬编码。
表格:
rowNo| col1 | col2 | colN
-----|------|------|----
row1 | X | |
row2 | X | X |
rowN | | |
预期结果:
| row | col |
| ----|---- |
| row1|col1 |
| row2|col1 |
| row2|col2 |
答案 0 :(得分:1)
您可以使用union all
:
select t.rowno, t.col
from ( select rowno, col1 as col
from table t
union all
select rowno, col2
from table t
. . .
) t
where col = 'X';
如果您正在使用SQL Server
,则可以apply
:
select t.rowNo as row, tt.col
from table t cross apply
( values (col1), (col2), . . . ,(coln)
) tt(col)
where tt.col = 'X';