加入SQL查询而不是给出期望的结果

时间:2017-04-10 18:34:39

标签: sql sql-server join

我和我分开询问如下:

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 equi join将所有上述查询组合成一个,如下所示:

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创建的查询中有什么问题?

表之间的关系是声明 - >(一对一) - >公司 - >(一对一) - > customer - >(one to many) - > Replaced_Part - >(one to many) - >津贴

2 个答案:

答案 0 :(得分:0)

请尝试将左连接用于Replaced_Part和allowance

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

答案 1 :(得分: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上使用你的条件。像

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

希望这对你有用。