繁体   English   中英

SQL查询联接具有不同列数的两个不同查询

[英]SQL query to join two different queries with different number of columns

我在这里有两个查询:

查询1:

SELECT allowdeductname_en, SUM(SFD_comp_value_tax@;emp_id) as                                                                                                                                      
GGG                                                                                                                                                                                                 
FROM TPYDPROCMTDD md                                                                                       
LEFT JOIN TPYDPROCMTDH mh on md.procmtdh_id = mh.procmtdh_id and 
md.company_id = mh.company_id                                                                                                                                                                                                                                                    
WHERE md.allowdeducttype = 'A'                                                                                                                                                                                                                                                     
AND md.company_id = '13565'
AND mh.company_id = '13565'
AND year(mh.paydate) = 2017                                                           
AND month(mh.paydate) = 1 
AND mh.costcenter_code = 99990001
group by allowdeductname_en
order by allowdeductname_en

查询2:

SELECT distinct allowdeductname_en                                                                                                                                                                                              
FROM TPYDPROCMTDD md                                                                                       
LEFT JOIN TPYDPROCMTDH mh on md.procmtdh_id = mh.procmtdh_id and 
md.company_id = mh.company_id                                                                                                                                                                                                                                                    
WHERE md.allowdeducttype = 'A'                                                                                                                                                                                                                                                     
AND md.company_id = '13565'
AND mh.company_id = '13565'
AND year(mh.paydate) = 2017                                                           
AND month(mh.paydate) = 1
order by allowdeductname_en 

查询1和查询2的结果 查询1和查询2的结果

无论如何,我可以相交,合并或合并这两个查询,以便看起来像这样:

预期成绩: 在此处输入图片说明

我尝试了许多不同的方法来完成此操作,但仍然无法获得想要的结果。 伙计们请帮忙!

好吧,这是最简单的解决方案:

select * from (/*query number 2*/) [a]
left join (/*query number 1*/) [b] 
on [a].allowdeductname_en = [b].allowdeductname_en

但是您可以在一个查询中完成此操作,因为两个查询都使用同一张表,但是为了提供该解决方案,我需要查看您的数据。

select t2.allowdeductname_en, GGG=isnull(t1.GGG,0)
 from 
(SELECT distinct allowdeductname_en                                                                                                                                                                                              
FROM TPYDPROCMTDD md                                                                                       
LEFT JOIN TPYDPROCMTDH mh on md.procmtdh_id = mh.procmtdh_id and 
md.company_id = mh.company_id                                                                                                                                                                                                                                                    
WHERE md.allowdeducttype = 'A'                                                                                                                                                                                                                                                     
AND md.company_id = '13565'
AND mh.company_id = '13565'
AND year(mh.paydate) = 2017                                                           
AND month(mh.paydate) = 1 ) t2

LEFT JOIN 

(SELECT allowdeductname_en, SUM(SFD_comp_value_tax@;emp_id) as                                                                                                                                      
GGG                                                                                                                                                                                                 
FROM TPYDPROCMTDD md                                                                                       
LEFT JOIN TPYDPROCMTDH mh on md.procmtdh_id = mh.procmtdh_id and 
md.company_id = mh.company_id                                                                                                                                                                                                                                                    
WHERE md.allowdeducttype = 'A'                                                                                                                                                                                                                                                     
AND md.company_id = '13565'
AND mh.company_id = '13565'
AND year(mh.paydate) = 2017                                                           
AND month(mh.paydate) = 1 
AND mh.costcenter_code = 99990001
group by allowdeductname_en)  t1 on t2.allowdeductname_en=t1.allowdeductname_en


this is not the best query but it give you the result you want. 

这些查询仅在条件costcenter_code = 99990001有所不同。 将其移至聚合函数SUM

select allowdeductname_en,
  sum(case when mh.costcenter_code = 99990001 then sfd_comp_value_tax end) as ggg
from tpydprocmtdd md
left join tpydprocmtdh mh on md.procmtdh_id = mh.procmtdh_id
                          and md.company_id = mh.company_id
                          and year(mh.paydate) = 2017
                          and month(mh.paydate) = 1
where md.allowdeducttype = 'A'
and md.company_id = 13565
group by allowdeductname_en
order by allowdeductname_en;

您可以在两个之间使用带有ISNULLLEFT JOIN

;WITH FirstQuery AS
(
    SELECT 
        allowdeductname_en, 
        SUM(SFD_comp_value_tax@;emp_id) as    GGG                                                                                                                                                                                                 
    FROM TPYDPROCMTDD md                                                                                       
    LEFT JOIN TPYDPROCMTDH mh on md.procmtdh_id = mh.procmtdh_id and 
    md.company_id = mh.company_id                                                                                                                                                                                                                                                    
    WHERE md.allowdeducttype = 'A'                                                                                                                                                                                                                                                     
    AND md.company_id = '13565'
    AND mh.company_id = '13565'
    AND year(mh.paydate) = 2017                                                           
    AND month(mh.paydate) = 1 
    AND mh.costcenter_code = 99990001
    group by allowdeductname_en
),
SecondQuery AS
(
    SELECT distinct allowdeductname_en                                                                                                                                                                                              
    FROM TPYDPROCMTDD md                                                                                       
    LEFT JOIN TPYDPROCMTDH mh on md.procmtdh_id = mh.procmtdh_id and 
    md.company_id = mh.company_id                                                                                                                                                                                                                                                    
    WHERE md.allowdeducttype = 'A'                                                                                                                                                                                                                                                     
    AND md.company_id = '13565'
    AND mh.company_id = '13565'
    AND year(mh.paydate) = 2017                                                           
    AND month(mh.paydate) = 1
)
SELECT
    S.allowdeductname_en,
    ISNULL(N.GGG, 0) AS GGG
FROM
    SecondQuery AS S
    LEFT JOIN FirstQuery AS N ON S.allowdeductname_en = N.allowdeductname_en

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM