簡體   English   中英

合並兩個 SQL 查詢得到 Output 在單表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM