Mysql 如何在单个查询中使用IF()语句获取单独的字段数据
我试图在单个查询中分别获取未付金额和部分金额Mysql 如何在单个查询中使用IF()语句获取单独的字段数据,mysql,sql,Mysql,Sql,我试图在单个查询中分别获取未付金额和部分金额 select if(i.status = 'unpaid', sum(i.total_amount), '') unpaid, if(i.status = 'partial', sum(i.paid_amount), '') partial from {CI}invoices i where i.customer_id = ? and date(i.invoice_date) < '2014-01-0
select
if(i.status = 'unpaid', sum(i.total_amount), '') unpaid,
if(i.status = 'partial', sum(i.paid_amount), '') partial
from {CI}invoices i
where
i.customer_id = ? and
date(i.invoice_date) < '2014-01-01' and
i.status not like 'paid%'
这是错误的,因为我不能在IF()
条件中使用as
。有谁能帮我解决这个问题或建议其他方法吗?试试看:
select
sum(case when i.status = 'unpaid' then i.total_amount else 0 end) as unpaid,
sum(case when i.status = 'partial' then i.paid_amount else 0 end) as partial
from {CI}invoices i
where
i.customer_id = ? and
date(i.invoice_date) < '2014-01-01' and
i.status not like 'paid%'
选择
未付金额(如果i.status=‘未付’,则i.total_amount,否则为0结束),
总和(当i.status=‘部分’时,则i.paid_amount,否则0结束)作为部分
来自{CI}i
哪里
i、 客户标识=?及
日期(即发票日期)<'2014-01-01'和
i、 状态与“付费%”不同
尝试以下操作:
SELECT
SUM( IF(i.status = 'unpaid', i.total_amount, 0) ) unpaid,
SUM( IF(i.status = 'partial', i.paid_amount, 0) ) partial
FROM {CI}invoices i
WHERE
i.customer_id = ? AND
date(i.invoice_date) < '2014-01-01' AND
i.status IN ('unpaid', 'partial')
选择
未付金额(如果(i.状态=‘未付’,i.总金额,0),
总额(如果(i.状态=‘部分’,i.已付金额,0))部分
来自{CI}i
哪里
i、 客户标识=?及
日期(即发票日期)<'2014-01-01'和
i、 状态为(“未付”、“部分”)
您必须将表交叉连接到表本身,才能在同一行中获得付款和未付款:
SELECT
sum(iu.total_amount) unpaid,
sum(ip.paid_amount) partial
FROM {CI}invoices iu
CROSS JOIN {CI}invoices ip
where
ip.customer_id = ? AND iu.customer_id = ? AND
date(ip.invoice_date) < '2014-01-01' AND date(iu.invoice_date) < '2014-01-01' AND
iu.status = 'unpaid' AND ip.status = 'partial'
选择
未付金额(iu.总金额),
部分金额(已支付的知识产权金额)
来自{CI}iu
交叉连接{CI}ip
哪里
ip.customer\u id=?和iu.customer_id=?及
日期(ip发票日期)<'2014-01-01'和日期(iu发票日期)<'2014-01-01'和
iu.status=‘未付’和ip.status=‘部分’
@hjpotter92您能详细说明一下您想说什么吗,我已经为总金额设置了十进制
数据类型
ahh,现在它可以工作了,但想问一件事,SUM(如果(i.status='unpaid',i.total\u amount,0))
是指如果(i.status='unpaid',SUM(i.total\u amount),SUM(0))
还是IF(i.status='navely',sum(i.total_amount),0)
?@jogesh_pi您想在过滤数据之后进行求和,而不是在浏览数据时进行求和。感谢您的解释:)
SELECT
sum(iu.total_amount) unpaid,
sum(ip.paid_amount) partial
FROM {CI}invoices iu
CROSS JOIN {CI}invoices ip
where
ip.customer_id = ? AND iu.customer_id = ? AND
date(ip.invoice_date) < '2014-01-01' AND date(iu.invoice_date) < '2014-01-01' AND
iu.status = 'unpaid' AND ip.status = 'partial'