Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
Mysql 使用where或IF SQL在Select中求和_Mysql_Sql - Fatal编程技术网

Mysql 使用where或IF SQL在Select中求和

Mysql 使用where或IF SQL在Select中求和,mysql,sql,Mysql,Sql,我创建了一个SELECT,如果NIF等于另一个NIF,契约与另一个NIF相同,乘积为100,我想“求和”不同的行 SELECT NIF, CONTRACT, PRODUCT, SUM(SALDO) when PRODUCT=100 DATE from TABLE_AAA 然后我想转换成图表 NIF CONTRACT PRODUCT SALDO DATE 1 1001 100 1 27/04/20

我创建了一个SELECT,如果NIF等于另一个NIF,契约与另一个NIF相同,乘积为100,我想“求和”不同的行

SELECT 
 NIF, 
 CONTRACT, 
 PRODUCT, 
 SUM(SALDO) when PRODUCT=100 
 DATE
from TABLE_AAA
然后我想转换成图表

NIF     CONTRACT    PRODUCT     SALDO   DATE
1       1001        100           1     27/04/2016
1       1001        100           1     27/04/2016
1       1003        100           2     27/04/2016
1       1003        100           2     27/04/2016
1       1001        102           1     27/04/2016
2       1001        200           5     27/04/2016
2       1001        200           1     27/04/2016

NIF     CONTRACT    PRODUCT     SALDO   DATE
1       1001        100         2       27/04/2016
1       1003        100         4       27/04/2016
1       1001        102         1       27/04/2016
2       1001        200         5       27/04/2016
2       1001        200         1       27/04/2016
您需要使用WHERE not when,并在WHERE子句中包含其他参数,还需要GROUP BY。如果没有样本数据和预期输出,我想这就是您想要的

SELECT 
NIF, 
CONTRACT, 
PRODUCT, 
SUM(SALDO) AS SUMSALDO,
DATE
FROM TABLE_AAA
WHERE PRODUCT = 100
AND CONTRACT = NIF
GROUP BY NIF, CONTRACT, PRODUCT, DATE
好吧,也许你的意思是:

SELECT 
NIF, 
CONTRACT, 
PRODUCT, 
SUM(CASE WHEN PRODUCT = 100 AND CONTRACT = NIF THEN SALDO ELSE 0 END) AS SUMSALDO,
DATE
FROM TABLE_AAA
GROUP BY NIF, CONTRACT, PRODUCT, DATE

这是SQL的求和函数。 从表_name中选择SUMcolumn_name

就你而言

SELECT NIF, CONTRACT, PRODUCT, SUM(SALDO) FROM Table_AAA WHERE PRODUCT = 100 AND NIF = CONTRACT;

我想这会有帮助。

您可以尝试以下方法:

SELECT 
NIF, 
CONTRACT, 
PRODUCT, 
CASE 
    WHEN (NIF = CONTRACT AND PRODUCT=100)
    THEN
        SUM(SALDO)
    WHEN(otherCondition)
    THEN
        SUM(otherSum)
    ELSE 
        NULL
END
DATE from TABLE_AAA

您可以在sql there或there中找到有关CASE的更多信息。如果您想对满足相同条件的行求和,并且您有多个条件,我想您可以使用以下查询:

SELECT 
 NIF, 
 CONTRACT, 
 PRODUCT, 
 SUM( case when NIF=CONTRACT AND PRODUCT=100 THEN SALDO ELSE 0 END ) SUM_PROD_100 ,
 "DATE"
from TABLE_AAA
GROUP BY NIF, CONTRACT,PRODUCT, "DATE"

您可以使用与列SUM_PROD_100中相同的逻辑对满足不同条件的其他行求和。

您实际上想要两个查询的组合:

产品100的聚合行 其他产品的未更改记录 因此,编写两个查询并将它们与UNION ALL结合起来:


添加一些示例表数据和预期结果-以及格式良好的文本。不是作为注释,我们无法读取。“改为编辑您的问题,@AleixCaminal添加了第二个答案。”
select nif, contract, product, sum(saldo) as saldo, max(date) as date
from table_aaa
where product = 100
group by nif, contract, product
union all
select nif, contract, product, saldo, date
from table_aaa
where product <> 100
order by nif, contract, product, date;