Php 来自一个查询的多个数学值

Php 来自一个查询的多个数学值,php,mysql,select,Php,Mysql,Select,我对一个问题有疑问 SELECT CASE WHEN b.value IS NULL THEN sum(d.value) ELSE sum(d.value) + sum(b.value) END AS sumaWydatkow FROM data d LEFT JOIN data_bills b ON d.id = b.data_id WHERE d.typ

我对一个问题有疑问

SELECT
        CASE WHEN b.value IS NULL 
        THEN sum(d.value)
        ELSE sum(d.value) + sum(b.value)
        END AS sumaWydatkow

        FROM data d
        LEFT JOIN data_bills b 
        ON  d.id = b.data_id
        WHERE   d.type = 0

        UNION

        SELECT

        CASE WHEN b.value IS NULL 
        THEN sum(d.value)
        ELSE sum(d.value) + sum(b.value)
        END AS sumaPrzychodow

        FROM data d
        LEFT JOIN data_bills b 
        ON  d.id = b.data_id
        WHERE   d.type = 1
我想求两列的和,或者如果其中一列(数据账单)为空,则只求一个表的和,表的列类型有两个版本:0和1

但现在是一个有两个记录的一丛。我想要两列,每列一列。 我在问,一个问题能不能解决这个问题

谢谢

尝试以下查询:

SELECT
      ( SELECT
        CASE WHEN b.value IS NULL 
        THEN sum(d.value)
        ELSE sum(d.value) + sum(b.value)
        END AS sumaWydatkow

        FROM data d
        LEFT JOIN data_bills b 
        ON  d.id = b.data_id
        WHERE   d.type = 0
       ) type0,

      ( SELECT
        CASE WHEN b.value IS NULL 
        THEN sum(d.value)
        ELSE sum(d.value) + sum(b.value)
        END AS sumaPrzychodow

        FROM data d
        LEFT JOIN data_bills b 
        ON  d.id = b.data_id
        WHERE   d.type = 1
      ) type1

演示-->

为什么要这样做:

CASE WHEN b.value IS NULL 
    THEN sum(d.value)
    ELSE sum(d.value) + sum(b.value)
    END
??这将基于是否根据任意行的b值包含sum(b.value)。你的意思可能只是:
sum(d.value)+coalesce(sum(b.value),0)
(当sum(b.value)为空时表示
情况…
将是等效的。)

我会这样做(谢谢你的小提琴,科迪尔科):

选择d.类型、总和(d.值)+总和(b.值)
从数据d左连接b上的数据\u账单b。数据\u id=d.id
其中d.输入(0,1)
按d类型分组

请(再次)观看。

我不完全明白。也许一些示例数据和期望的结果有助于说明您的问题?想对两列求和吗。此列位于两个不同的表上。但我想通过一个查询来实现这一点。使用UNION,我在结果中有一个coolumn,有两个查询记录。但我希望输出结果分为两列,每列一条记录:)感谢replayPerhaps提供的一些示例数据和期望的结果将有助于说明您的问题?SQL Fiddle示例将非常有用:
SELECT
    sum( if(d.type=0, coalesce(d.value,0)+coalesce(b.value,0), null) ) type0,
    sum( if(d.type=1, coalesce(d.value,0)+coalesce(b.value,0), null) ) type1
FROM data d
LEFT JOIN data_bills b
ON  d.id = b.data_id
WHERE d.type in (0,1);