Mysql 使用where或IF SQL在Select中求和
我创建了一个SELECT,如果NIF等于另一个NIF,契约与另一个NIF相同,乘积为100,我想“求和”不同的行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,
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;