簡體   English   中英

SQL連接兩個語句

[英]SQL Joining Two Statements

我還沒有發現這么大的SQL連接問題,這就是問題所在:我有兩條SQL語句,一條將資金划入單獨的組,而一條將花在這些組中的錢投入,我將如何聯接他們在一起,以便它一起顯示“預算”和“費用”? 幾乎沒有一個部門,資助類別,預算和部門,支出類別,費用表,而是要一個部門,資助類別,預算,費用表。

SELECT st.name as "Department", sft.longname as "Funding Category", sum(sf.amount) as "Budget" 
FROM 
money_type as st, 
money_funding_type as sft, 
money_funding as sf 
WHERE 
st.ID = sf.type_ID AND 
sft.ID = sf.funding_ID 
GROUP BY 
sf.type_id, sf.funding_id 

SELECT st.name as "Department", sft.longname as "Funding Category", sum(si.amount) as "Expenses" 
FROM 
money_type as st, 
money_funding_type as sft, 
money_invoice as si 
WHERE 
st.ID = si.type_ID AND 
sft.ID = si.funding_ID 
GROUP BY 
si.type_id, si.funding_id

怎么樣

SELECT  st.name as "Department", 
        COALESCE(sft.longname,sfti.longname) as "Funding Category", 
        sum(sf.amount) as "Budget",
        sum(si.amount) as "Expenses" 
FROM    money_type as st LEFT JOIN

        money_funding as sf  ON st.ID = sf.type_ID LEFT JOIN
        money_funding_type as sft ON sft.ID = sf.funding_ID LEFT JOIN

        money_invoice as si ON st.ID = si.type_ID LEFT JOIN
        money_funding_type as sfti  ON sfti.ID = si.funding_ID
GROUP BY    st.name, 
            COALESCE(sft.longname,sfti.longname)

使用FULL OUTER JOIN加入發票和資金,然后按資金類型,資金和發票分組。

您可以嘗試以下方法。 第一個查詢“ AllTypes”是獲取可用數據的唯一ID /類型,而不是笛卡爾。 由此,簡單地連接到類型和資金類型以獲取描述。

然后,根據自己的money_funding / money_invoice元素又簡化了兩個選擇,僅獲得其“ id”字段和金額總和,因此對於每種預算和費用,每種類型/資金都有1條記錄。 然后將它們左聯接到“ AllTypes”,如果它們具有對應的值,則將其作為結果,否則為0。

聯接之間的額外換行符僅出於可讀性

SELECT
      st.name as "Department", 
      sft.longname as "Funding Category", 
      coalesce( Budgets.Budget, 0 ) as Budget,
      coalesce( Expenses.Expense, 0 ) as Expense,
      coalesce( Budgets.Budget, 0 ) - coalesce( Expenses.Expense, 0 ) as AmtRemain
   from 
      ( select distinct
              type_id,
              funding_id
           from
              money_funding
        union
        SELECT distinct
              type_id,
              funding_id
           from
              money_invoice  ) AllTypes

         JOIN money_type as st
            ON AllTypes.type_id = st.id

         JOIN money_funding_type as sft
            ON AllTypes.funding_id = sft.id

         LEFT JOIN ( SELECT 
                           sf.type_id,
                           sf.funding_id,
                           sum(sf.amount) as "Budget" 
                        FROM 
                           money_funding as sf 
                        GROUP BY 
                           sf.type_id, 
                           sf.funding_id ) Budgets
            ON AllTypes.type_id = Budgets.Type_id
            AND AllTypes.funding_id = Budgets.Funding_ID

         LEFT JOIN ( SELECT 
                           si.type_id, 
                           si.funding_id,
                           sum(si.amount) as "Expense" 
                        FROM 
                           money_invoice as si 
                        GROUP BY 
                           si.type_id, 
                           si.funding_id ) Expenses
            ON AllTypes.type_id = Expenses.Type_id
            AND AllTypes.funding_id = Expenses.Funding_ID

在“ AllTypes”查詢中,您可能需要刪除第二個“ DISTINCT”子句,因為第一個子句可能適用於整個“ AllTypes”查詢,並且可能會給您一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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