![](/img/trans.png)
[英]SQL - merge two queries with different number of columns in select statement into one
[英]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
无论如何,我可以相交,合并或合并这两个查询,以便看起来像这样:
我尝试了许多不同的方法来完成此操作,但仍然无法获得想要的结果。 伙计们请帮忙!
好吧,这是最简单的解决方案:
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;
您可以在两个之间使用带有ISNULL
的LEFT 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.