[英]Merge Two SQL Queries to get Output in Single Table
我有 2 個 select 查詢並獲得單獨的結果。 但我的要求是獲得兩者的組合結果並返回一個結果。 結果應由Agencyid、Agency、縮寫、地址計數和協作計數組成。
select a.agencyid,a.name as Agency,a.abbrev,count(aa.agencyid) as no_of_address
from Agency a
left join AgencyAddress aa on aa.agencyid=a.agencyid
group by a.name,a.abbrev,a.agencyid
order by a.name
select a.agencyid,a.name as Agency,a.abbrev,count(c.CollaborationID) as no_of_collaboration
from Agency a
left join Collaboration c on c.AgencyID=a.AgencyID
group by a.name,a.abbrev,a.agencyid
order by a.name
因此,我得到 2 個輸出,如下所示:
我預期的 output 應該如下:
SELECT aa.agencyid, aa.name AS Agency, aa.abbrev, no_of_address, no_of_collaboration
FROM (
SELECT a.agencyid, a.name AS Agency, a.abbrev, COUNT(a.agencyid) AS no_of_address
FROM Agency a
LEFT JOIN AgencyAddress aa ON aa.agencyid=a.agencyid
GROUP BY a.name, a.abbrev, a.agencyid
) aa
LEFT JOIN (
SELECT a.agencyid, a.name AS Agency, a.abbrev, COUNT(c.CollaborationID) AS no_of_collaboration
FROM Agency a
LEFT JOIN Collaboration c ON c.AgencyID=a.AgencyID
GROUP BY a.name,a.abbrev,a.agencyid
) bb ON aa.agencyid = bb.agencyid AND aa.name = bb.name AND aa.abbrev = bb.abbrev
按 aa.name 排序
也許像這樣?
與此合作:
SELECT T1.AgencyID, T1.Agency, T1.abbrev, no_of_address, no_of_collaboration
FROM (
SELECT A.AgencyID,A.Name AS Agency,A.abbrev,COUNT(AA.AgencyID) AS no_of_address
FROM Agency A
LEFT JOIN AgencyAddress AA ON AA.agencyid = A.agencyid
GROUP BY A.Name, A.abbrev, A.agencyid
) T1
JOIN (
SELECT A.AgencyID,A.Name AS Agency,A.abbrev,COUNT(C.CollaborationID) AS no_of_collaboration
FROM Agency A
LEFT JOIN Collaboration C ON C.AgencyID = A.AgencyID
GROUP BY A.Name, A.abbrev, A.agencyid
) T2 ON T1.AgencyID = T2.AgencyID
ORDER BY T1.Agency
更好的方法來做到這一點:
SELECT a.agencyid,
a.name AS Agency,
a.abbrev,
aa.no_of_address,
c.no_of_collaboration
FROM Agency a
LEFT JOIN
(SELECT agencyid,
count(agencyid) AS no_of_address
FROM AgencyAddress
GROUP BY agencyid) aa ON a.agencyid = aa.agencyid
LEFT JOIN
(SELECT agencyid,
count(agencyid) AS no_of_collaboration
FROM Collaboration
GROUP BY agencyid) c ON a.agencyid = c.agencyid
ORDER BY a.name;
我認為其他答案更有效。
實現這一目標的另一種方法是:
SELECT a.agencyid,
a.name AS Agency,
a.abbrev,
(SELECT count(aa.agencyid)
FROM AgencyAddress aa
WHERE aa.agencyid=a.agencyid) AS no_of_address,
(SELECT count(c.agencyid)
FROM Collaboration c
WHERE c.agencyid=a.agencyid) AS no_of_collaboration
FROM Agency a
ORDER BY a.name;
這更容易閱讀,但不如上述有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.