0

クエリを機能させる方法を理解しようとしています。クロス結合をしたいのですが、実際にはクロス結合タイプのクエリではありません..また、完全な結合でもありません(私は考えていません)ので、入力のためにコミュニティに投げています。

私はテーブル1を持っています:

Acct  AcctDesc   CostType   Value1  Value2
12    School     Tax        12.42   3.20
12    School     Supplies   34.22   9.88
12    School     Payroll    122.00  8.88
12    School     Milk       8.88    7.77
13    Work       Tax        28.88   9.70
13    Work       Supplies   15.15   8.80
13    Work       Cookies    5.90    7.00
13    Work       Payroll    79.00   8.88
13    Work       Misc       4.33    3.33
13    Work       Vehicle    8.33    0.33

このテーブルには、複数の CostTypes があります。一意のコストタイプをすべて取得し、それらをデータに結合して、(この場合は学校の) 結果として得られるビューを作成し、コストにゼロを挿入したいと考えています。(用途は、後でレポートでゼロ列を返すことです)

Acct  AcctDesc   CostType   Value1  Value2
12    School     Tax        12.42   3.20
12    School     Supplies   34.22   9.88
12    School     Payroll    122.00  8.88
12    School     Milk       8.88    7.77
12    School     Cookies    0.00    0.00
12    School     Misc       0.00    0.00
12    School     Vehicle    0.00    0.00

私は次のようなことができると思いました

Select Acct, AcctDesc, CostType, Value1, Value2 
from Table1
Cross Join (Select Distinct CostType from Table1) t2

しかし、私はすぐに、それだけではうまくいかないことに気付きました。自然結合も試しましたが、うまくいきません。

テーブルからのすべての一意の値を使用して CTE を実行し、元のクエリで左結合を実行する必要があるかもしれないと考えています。

ご意見ありがとうございます。

4

2 に答える 2

0

これはここで機能しているようです

SELECT 
    subq.Acct, 
    subq.AcctDesc, 
    subq.CostType, 
    Value1 = ISNULL(Value1,0), 
    Value2 = ISNULL(Value2,0) 
FROM (
    SELECT
       t2.CostType, 
       t1.Acct, 
       t1.AcctDesc 
    FROM Table1 t1 
    CROSS JOIN (select distinct CostType from Table1) t2
    GROUP BY t2.CostType, t1.Acct, t1.AcctDesc
    ) subq
LEFT JOIN Table1 t ON subq.CostType = t.CostType 
                  AND subq.Acct = t.Acct
                  and subq.AcctDesc = t.AcctDesc
--WHERE t.AcctDesc = 'School'
ORDER BY subq.Acct, subq.AcctDesc
于 2014-10-22T17:44:18.790 に答える