2017-04-10 8 views
0

を与えていないSQLクエリに参加し、次のように私は私と一緒に別のクエリを持って次のように参加は、所望の結果

SELECT c.id 
FROM claim c, 
     company co, 
     customer cu 
WHERE c.company_id = co.id 
     AND c.customer_id = cu.id 
     AND co.company_code = 'LTO' 
     AND cu.customer_no = '021540' 
     AND c.invoice_number IS NOT NULL 
     AND c.invoice_date IS NULL 
     AND c.invoice_number = '20170331' 

SELECT Sum(price) 
FROM replaced_part 
WHERE claim_id IN (628099, 674047, 1182523, 1282549, 
        1479834, 1480585, 1487452, 1515238); 

SELECT Sum(price) 
FROM allowance 
WHERE claim_id IN (628099, 674047, 1182523, 1282549, 
        1479834, 1480585, 1487452, 1515238); 

私はグループにしようとしていた一緒に、上記のすべてのクエリのSQLエクイを使用して一つに:

select co.company_Code, 
     cu.customer_No, 
     c.invoice_Number, 
     sum(r.price), 
     sum(a.price) 
FROM claim c INNER JOIN company co ON c.COMPANY_ID=co.ID 
       INNER JOIN customer cu ON c.CUSTOMER_ID=cu.ID 
       INNER JOIN replaced_part r ON r.claim_id=c.id 
       INNER JOIN allowance a ON a.claim_id = c.id 
WHERE co.company_code = 'LTO' and cu.customer_no='021540' and 
     c.INVOICE_NUMBER is not null and c.INVOICE_DATE is null and 
     c.INVOICE_NUMBER='20170331' 
GROUP BY co.company_Code, cu.customer_No, c.invoice_Number 

しかし、上記で定義した3つの別々のクエリを実行した後に得られた結果(クエリは正常に実行されますが、合計は正しくありません)が得られません... equi joinを使用して作成されたクエリの問題は何ですか?

テーブルとの関係は、クレーム - >(1対1) - >企業 - >(1対1) - >顧客 - >(1対多) - > Replaced_Part - >(1対多) - >手当

+0

テーブルをリストする古くからの標準的でない構文の代わりに適切なANSI結合(INNER JOINとON句)を使用して書き直し、次にWHERE句を使用してフィルタリングします。 – pmbAustin

+0

クエリごとに1つの 'CTE'を使用し、結果を結合します。 –

+0

INNER JOINを使用してクエリを書き換えます。 –

答えて

0

Replaced_Partと手当

select co.company_Code 
    , cu.customer_No 
    , c.invoice_Number 
    , (SELECT sum(r.price) FROM replaced_part r WHERE r.claim_id = c.id) 
    , (SELECT sum(a.price) FROM allowance a WHERE a.claim_id = c.id) 
FROM claim c 
INNER JOIN company co 
    ON c.COMPANY_ID=co.ID 
INNER JOIN customer cu 
    ON c.CUSTOMER_ID=cu.ID  
WHERE co.company_code = 'LTO' 
AND cu.customer_no='021540' 
AND c.INVOICE_DATE is null 
AND c.INVOICE_NUMBER='20170331' 
GROUP BY co.company_Code 
, cu.customer_No 
, c.invoice_Number 
+0

結果に変化はありませんwendyの代わりに左結合を使用し、置換部分は出力に何の影響も与えません –

0

そのテーブルの上にあなたの条件を発射、すべてのテーブルを結合し、一時テーブルを作成し、一時テーブルを使用しようとするために参加し、左使用してみてください。

例:

select co.company_Code, 
     cu.customer_No, 
     c.invoice_Number, 
     sum(r.price), 
     sum(a.price) 
into #temp from (claim c 
       INNER JOIN company co ON c.COMPANY_ID=co.ID 
       INNER JOIN customer cu ON c.CUSTOMER_ID=cu.ID 
       INNER JOIN replaced_part r ON r.claim_id=c.id 
       INNER JOIN allowance a ON a.claim_id = c.id 

、その後は#TEMPにあなたの条件を使用しています。 like

select * from #temp 
WHERE company_code = 'LTO' and customer_no='021540' and 
     INVOICE_NUMBER is not null and INVOICE_DATE is null and 
     INVOICE_NUMBER='20170331' 
GROUP BY company_Code, customer_No, invoice_Number 

これはうまくいきます。

関連する問題