使用SQL根据值获取行和列?

时间:2018-09-07 12:51:06

标签: sql pivot transpose

我有几个带有行和列的表。在某些情况下有一个X,在某些情况下没有。现在,我想获得其中有X的所有行-列对。

SQL可能吗?可以通过其他方式实现吗?

我曾经有一个想法是使用case,但我需要对所有col / row组合进行硬编码。

示例

表格:

rowNo| col1 | col2 | colN
-----|------|------|----
row1 |  X   |      |
row2 |  X   |   X  |
rowN |      |      |

预期结果:

| row | col |
| ----|---- |
| row1|col1 |
| row2|col1 |
| row2|col2 |

1 个答案:

答案 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';