1

私は以下のような2つのSQLテーブルを持っています

columns of T1: meterID, parentID, childID  
columns of T2: dataID, meterID, date, amount  

テーブルのサンプルデータ。

      T1                            T2
-------------              -------------------------
1 | null |  2  *           1 | 1 | 01,01,2013 | 100  *
1 | null |  3  *           2 | 2 | 01,01,2013 | 60   *
2 |   1  |  4              3 | 3 | 01,01,2013 | 40   *
2 |   1  |  5              4 | 4 | 01,01,2013 | 35
3 |   1  |  6              5 | 5 | 01,01,2013 | 25
3 |   1  |  7              6 | 6 | 01,01,2013 | 15
4 |   2  | null            7 | 7 | 01,01,2013 | 25
5 |   2  | null
6 |   3  | null  
7 |   3  | null  

子供の金額の合計が親の金額と等しいかどうかを比較したいと思います。

例えば; Meter1はmeter2とmeter3の親です(*の付いた行)。100 = 60+40かどうかを確認したい
。SQLクエリでこれを行うにはどうすればよいですか。

英語が下手でごめんなさい。

4

2 に答える 2

1

このリクエストは子をグループ化し、親と比較します。

SELECT t1.meterID, 
       CASE WHEN t1.amount = o.SumAmount THEN 'IsMatch' ELSE 'IsNotMatch' END
FROM T2 t1 OUTER APPLY (
                        SELECT SUM(t3.amount) AS SumAmount
                        FROM T1 t2 JOIN T2 t3 ON t2.childID = t3.meterID
                        WHERE t1.meterID = t2.meterID
                        GROUP BY t2.meterID
                        ) o

SQLFiddle のデモ

テスト後: GROUP BY 句なしでクエリを使用できます

SELECT t1.meterID, 
       CASE WHEN t1.amount = o.SumAmount THEN 'IsMatch' ELSE 'IsNotMatch' END
FROM T2 t1 OUTER APPLY (
                        SELECT SUM(t3.amount) AS SumAmount
                        FROM T1 t2 JOIN T2 t3 ON t2.childID = t3.meterID
                        WHERE t1.meterID = t2.meterID
                        ) o
于 2013-02-19T17:19:08.953 に答える
0

子の金額を合計し、親と比較します。これには、テーブルへの 2 つの結合が必要です。1t2つは親用、もう 1 つは子用です。

t1次のクエリは、に重複するエントリがないことを前提としています。

select t1.parentId, t1.childId,
       parent.amount as parent_amount,
       SUM(child.amount) as child_amount,
       (case when parent.amount = SUM(child.amount) then 'Match'
             else 'NoMatch'
        end)
from t1 left outer join
     t2 parent
     on t1.parentId = t2.meterid left outer join
     t3 child
     on t1.childId = t2.meterId
group by t1.parent_id, t1.childId, parent.amount
于 2013-02-19T17:05:49.110 に答える