0

次のような 2 つのトランザクション テーブルがあります。

TableA

 X  R  S
 71 1 10 
 71 2 20
 71 3 30 
 72 1 40 
 72 2 50
 72 3 60

TableB


 X  P Q
 71 1 110 
 71 2 120
 71 3 130 
 73 1 140 
 73 2 150
 73 3 160

テーブルをフラット化し、次のような結果が得られるクエリを実行したい:

  X  S1  S2  S3   Q1  Q2  Q3

  71 10  20  30  110 120 130
  72 40  50  60   0    0   0
  73  0   0   0  140 150 160

ここで、S と Q の下付き文字は、2 番目の列が下付き文字と等しい場合の 3 番目の列の値を示します。たとえば、S1 はS2 番目の列が 1 に等しい場合の列の値を示し、Q2 はQ2 番目の列が 2 の場合の値を示します。

私はそれについて最善の方法が何であるかを理解できません。case ステートメントを使用できるか、サブクエリである可能性があります。しかし、正直なところ、それについて具体的なアイデアはありません。

4

2 に答える 2

2

結合と 2 つの集計を使用してこれを行う必要があります。

select coalesce(a.x, b.x) as x, a.s1, a.s2, a.s3, b.q1, b.q2, b.q3
from (select x,
             max(case when r = 1 then s end) as s1,
             max(case when r = 2 then s end) as s2,
             max(case when r = 3 then s end) as s3
      from tableA a
      group by x
     ) a full outer join
     (select x,
             max(case when p = 1 then q end) as q1,
             max(case when p = 2 then q end) as q2,
             max(case when p = 3 then q end) as q3
      from tableb b
      group by x
     ) b
     on a.x = b.x;

編集:

ネストされたサブクエリを避けたい場合は、次を試すことができます。

select coalesce(a.x, b.x) as x,
       max(case when r = 1 then s end) as s1,
       max(case when r = 2 then s end) as s2,
       max(case when r = 3 then s end) as s3
       max(case when p = 1 then q end) as q1,
       max(case when p = 2 then q end) as q2,
       max(case when p = 3 then q end) as q3
from TableA a full outer join
     TableB b
     on a.x = b.x and a.r = b.p
group by coalesce(a.x, b.x);

さらに効率的かもしれません。

于 2013-08-28T01:39:24.103 に答える
0
SELECT 
ISNULL(A.x, B.x) AS x, SUM(CASE WHEN R = 1 THEN S ELSE 0 END) AS S1,
SUM(CASE WHEN R = 2 THEN S ELSE 0 END) AS S2,
SUM(CASE WHEN R = 3 THEN S ELSE 0 END) AS S3,
SUM(CASE WHEN P = 1 THEN Q ELSE 0 END) AS Q1,
SUM(CASE WHEN P = 2 THEN Q ELSE 0 END) AS Q2,
SUM(CASE WHEN P = 3 THEN Q ELSE 0 END) AS Q3 
FROM tableA A FULL JOIN tableB B ON A.X = B.X
GROUP BY ISNULL(A.x, B.x)

T-SQL バージョン

于 2013-08-28T01:40:12.417 に答える