0

テーブルから複数の列をアンピボットしようとしています。これまでのところ、標準の Unpivot を使用しようとしましたが、最初の部分では成功しましたが、2 番目の部分では成功しませんでした。両方の列のピボットを解除したいと思います。私がやろうとしていることの写真を添付し​​ました。テーブルはエラーに関係しています。したがって、E1 は error1 の略で、E2 は error2 の略です。

INSERT INTO #tempWorkflowItem
SELECT AssignmentId, Code, Response FROM #temp2
UNPIVOT(Response FOR Code in (E1, E2, E3 ))AS WorkflowItemsUnpivot
UNPIVOT(Reason FOR Code in (E1Reason, E2Reason, E3Reason )) AS WorkflowItemsUnpivot2

テーブル変換

4

2 に答える 2

1

使用apply:

select v.code, v.reason
from #temp2 t cross apply
     (values ('E1', E1Reason), 
             ('E2', E2Reason), 
             ('E3', E3Reason)
     ) v(code, reason, e1, e2, de3);

where節も必要だと思います:

where v.code = 'E1' and t.e1 > 0 and
      v.code = 'E2' and t.e2 > 0 and
      v.code = 'E3' and t.e3 > 0 ;

また:

where v.reason is not null

NULL値を引き戻すのも奇妙に思えます。

于 2020-10-26T21:14:59.727 に答える
1

I would recommend cross apply:

select x.*
from mytable t
cross appy (values 
    ('e1', e1, e1reason),
    ('e2', e2, e2reason),
    ('e3', e3, e3reason)
) x(code, response, reason)
于 2020-10-26T21:15:36.110 に答える