Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 连接两条语句的SQL语句_Php_Sql_Join - Fatal编程技术网

Php 连接两条语句的SQL语句

Php 连接两条语句的SQL语句,php,sql,join,Php,Sql,Join,我没有发现任何SQL连接问题有这么大,这就是问题所在:我有两个SQL语句,一个将资金分为不同的组,另一个将在这些组中花费的资金分为不同的组,我如何将它们连接在一起,以便将“预算”和“费用”显示在一起? 基本上,没有部门,资金类别,预算和部门,资金类别,费用表,我想要一个部门,资金类别,预算,费用表 SELECT st.name as "Department", sft.longname as "Funding Category", sum(sf.amount) as "Budget" FROM

我没有发现任何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)

您可以尝试以下方法。第一个查询“AllTypes”是获取可用数据的不同id/类型,而不是笛卡尔类型。从中,simple连接到类型和资金类型以获得描述

然后,再选择两个简化的money\u funding/money\u invoice元素,仅获取其“id”字段和金额总和,因此对于每个预算和费用,每个类型/资金将有一条记录。然后将它们左键连接到“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”查询,并且可能会给您一个错误。

您能给我它的SQL吗?我不懂PHP而不是SQL,我真的不知道它是如何工作的。它最终完成了,不起作用。如果费用的值应该是475.9,它是951.8,如果该值应该返回26452.19,它返回72388013.48009163向我们展示您的实际表结构和一些示例数据,我们可以看一下。根据您提供的查询,这是一个最佳效果。