首页 > 解决方案 > SELECT 返回重复的不同列值

问题描述

绑定查询可以根据其他列中的值复制某些列值。ID1 列总是有一个值,ID2 和 ID3 可能有也可能没有。表中的数据如下所示。

RefNum  DetailDesc        ID1        ID2      ID3        HRs
43      Test detail 1.    110011     220022   330033     1.5
43      Test detail 2.    110011     220022   330033     0.75
43      Test detail 3.    110011     220022   NULL       1.25
43      Test detail 4.    110011     220022   NULL       1.5
43      Test detail 5.    110011     NULL     NULL       0.5
43      Test detail 6.    110011     NULL     NULL       2

想要查询此表以显示这样的结果集

RefNum  IDOrder   ID        DetailDesc        HRs
43      1         110011    Test detail 1.    1.5
43      2         220022    Test detail 1.    1.5
43      3         330033    Test detail 1.    1.5
43      1         110011    Test detail 2.    0.75
43      2         220022    Test detail 2.    0.75
43      3         330033    Test detail 2.    0.75
43      1         110011    Test detail 3.    1.25
43      2         220022    Test detail 3.    1.25
43      1         110011    Test detail 4.    1.5
43      2         220022    Test detail 4.    1.5
43      1         110011    Test detail 5.    0.5
43      1         110011    Test detail 6.    2

一直在尝试这个尝试案例选择,并插入到临时表中。我卡住了。

标签: sqlsql-server

解决方案


您可以使用cross applyunpivot 数据:

select t.RefNum, v.IDOrder, v.ID, t.DetailDesc, t.HRs
from t cross apply
     (values (1, t.id1), (2, t.id2), (3, t.id3)
     ) v(idorder, id)
where v.id is not null;

推荐阅读