0

次の形式のテーブルが多数あります。

表1

[idA] [numA]
 NULL   8
 1      10
 2      15
 3      16

表 2

[idB] [numB]
 2      14
 3      30
 4      32

表 3

[idC] [numC]
 NULL   56
 1      24
 4      37
 5      36

...

さて、次の結果を生成するために T-Sql クエリを作成する方法がわかりません。

[id] [numA] [numB] [numC] ...
NULL  8      0      56
1     10     0      24
2     15     14     0
3     16     30     0
4     0      32     37
5     0      0      36

これを解決する方法について何か提案はありますか?

4

3 に答える 3

2

それが自然なアプローチのように思えるので、完全な外部結合を使用したソリューションを提供します。

SELECT coalesce(a.id, b.id, c.id, . . .) as id,
       a.NumA, b.NumB, c.NumC, . . .
FROM TableA a full outer join
     TableB b
     on a.id = b.id full outer join
     TableC c
     on coalesce(a.id, b.id) = c.id

ただし、合体を維持するには、クエリを慎重に記述する必要があります。このアプローチの利点の 1 つは、クエリの id 列にインデックスを使用する必要があることです。

于 2012-05-11T13:16:22.463 に答える
1

これを試してください

select id, max(numa),max(numb),max(numc) from
(
select id,numa,0 as numb,0 as numc from tb1
union all
select id,0 as numa,numb as numb,0 as numc from tb2
union all
select id,0 as numa,0 as numb,numc as numc from tb3
)X
group by id
order by id

ありがとうラジャス

于 2012-05-11T13:27:11.327 に答える
0
SELECT Maintable.id, 
       Table1.numA, 
       Table2.numB, 
       Table3.numC 
FROM   (SELECT ida AS id 
        FROM   Table1 
        UNION 
        SELECT idb AS id 
        FROM   Table2 
        UNION 
        SELECT idc AS id 
        FROM   Table3) MainTable 
       LEFT JOIN Table1 
         ON Maintable.id = Table1.Ida 
       LEFT JOIN Table2 
         ON Maintable.id = Table2.idB 
       LEFT JOIN Table3 
         ON Maintable.id = Table3.idC 
于 2012-05-11T12:23:27.483 に答える