将列拆分为行的最佳方法是什么(例如矩阵?)
表格示例:

Name Hours1 Hours2 Hours3
Jon  32     40     30
Ana  40     0      40


结果(不显示0个值):

Name Hours
Jon  32
Jon  40
Jon  30
Ana  40
Ana  40


我可以想到的一种方法是使用Union

SELECT
  Name,
  Hours1
FROM #HOURSTABLE
WHERE Hours1 <> 0

UNION ALL

SELECT
  Name,
  Hours2
FROM #HOURSTABLE
WHERE Hours2 <> 0

UNION ALL

SELECT
  Name,
  Hours3
FROM #HOURSTABLE
WHERE Hours3 <> 0


还有其他建议吗?

最佳答案

我更喜欢“交叉申请”这类商品。它提供了更多的灵活性。



Select Name
      ,B.*
 From  YourTable A
 Cross Apply ( values (Hours1)
                     ,(Hours2)
                     ,(Hours3)
             ) B(Hours)
 Where B.Hours<>0


退货

Name    Hours
Jon     32
Jon     40
Jon     30
Ana     40
Ana     40

关于sql - 将列拆分为行的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48104231/

10-13 07:58