Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
Sql 选择带有CASE条件和SUM()的查询_Sql_Sql Server_Sum_Case_Conditional Statements - Fatal编程技术网

Sql 选择带有CASE条件和SUM()的查询

Sql 选择带有CASE条件和SUM()的查询,sql,sql-server,sum,case,conditional-statements,Sql,Sql Server,Sum,Case,Conditional Statements,我目前正在使用这些sql语句。我的表具有包含“现金”或“支票”的CPaymentType字段。我可以通过执行如下所示的2条SQL语句来汇总付款金额。在这种情况下,用户甚至不会注意到执行2条sql语句或仅执行1条sql语句时的速度差异,但是,我不喜欢我的方式,我只需要1条sql语句。如何用CASE条件将这些语句重新构造为1个语句?我无法理解,因为在线示例的结果要么是1,要么是0,要么是布尔值。我不想把过期的支票付款包括在内。多谢各位 Select SUM(CAmount) as PaymentAm

我目前正在使用这些sql语句。我的表具有包含“现金”或“支票”的CPaymentType字段。我可以通过执行如下所示的2条SQL语句来汇总付款金额。在这种情况下,用户甚至不会注意到执行2条sql语句或仅执行1条sql语句时的速度差异,但是,我不喜欢我的方式,我只需要1条sql语句。如何用CASE条件将这些语句重新构造为1个语句?我无法理解,因为在线示例的结果要么是1,要么是0,要么是布尔值。我不想把过期的支票付款包括在内。多谢各位

Select SUM(CAmount) as PaymentAmount 
from TableOrderPayment 
where CPaymentType='Cash' and CStatus='Active';

Select SUM(CAmount) as PaymentAmount 
from TableOrderPayment 
where CPaymentType='Check' and CDate<=SYSDATETIME() and CStatus='Active';
选择SUM(CAmount)作为付款金额
从表格订购付款
其中CPaymentType='Cash'和CStatus='Active';
选择金额(CAmount)作为付款金额
从表格订购付款
其中CPaymentType='Check'和CDate使用“Or”

选择SUM(CAmount)作为付款金额
从表格订购付款
其中(CPaymentType='Check'或CPaymentType='Cash')

和CDate以在单独的列中获得每个总和:

Select SUM(IF(CPaymentType='Check', CAmount, 0)) as PaymentAmountCheck,
       SUM(IF(CPaymentType='Cash', CAmount, 0)) as PaymentAmountCash
from TableOrderPayment
where CPaymentType IN ('Check','Cash') 
and CDate<=SYSDATETIME() 
and CStatus='Active';
选择SUM(如果(CPaymentType='Check',CAmount,0))作为PaymentAmountCheck,
金额(如果(CPaymentType='Cash',CAmount,0))作为付款金额现金
从表格订购付款
其中CPaymentType输入('支票','现金')

CDate我认为你不需要一个案例陈述。您只需要更新where子句,并确保使用正确的括号对子句进行分组

SELECT Sum(CAMount) as PaymentAmount 
from TableOrderPayment 
where (CStatus = 'Active' AND CPaymentType = 'Cash') 
OR (CStatus = 'Active' and CPaymentType = 'Check' and CDate<=SYSDATETIME())
选择Sum(CAMount)作为付款金额
从表格订购付款
其中(CStatus='Active'和CPaymentType='Cash')
或者(CStatus='Active'和CPaymentType='Check'和CDate
选择SUM(当CPayment='Cash'然后CAmount Else 0 End)作为CashPaymentAmount,
合计(当CPayment='Check'然后CAmount Else 0结束时的情况)作为支票付款金额
从表格订购付款
其中(CPayment='Cash'或CPayment='Check')和CDate
选择CPaymentType,sum(CAmount)
从表格订购付款
其中(CPaymentType='Cash'和CStatus='Active')

或者(CPaymentType='Check'和CDate如果您不想在结果中使用过期支票,您的第二个查询似乎可以实现。您不喜欢它的什么?是的,我已经实现了我想要的。但是,我不喜欢使用两个sql语句。我希望这两个语句合并成一个带有CASE条件的语句:)顺便说一句:“CASE expression”是更正确的术语。(表达式的计算结果为单个值。)谢谢你所有的回答,都是正确的,但我会选择这个1,因为我一直在寻找案例陈述。我从来没有使用过案例陈述,这就是为什么我要尝试这个例子。我只做了两个sql语句,这样我的观点就很容易被理解。谢谢你,先生!@chris_techno25关于我的建议,因为你是一个工程师w用户,您要进行和,讨论。
Select SUM(IF(CPaymentType='Check', CAmount, 0)) as PaymentAmountCheck,
       SUM(IF(CPaymentType='Cash', CAmount, 0)) as PaymentAmountCash
from TableOrderPayment
where CPaymentType IN ('Check','Cash') 
and CDate<=SYSDATETIME() 
and CStatus='Active';
SELECT Sum(CAMount) as PaymentAmount 
from TableOrderPayment 
where (CStatus = 'Active' AND CPaymentType = 'Cash') 
OR (CStatus = 'Active' and CPaymentType = 'Check' and CDate<=SYSDATETIME())
Select SUM(CASE When CPayment='Cash' Then CAmount Else 0 End ) as CashPaymentAmount,
       SUM(CASE When CPayment='Check' Then CAmount Else 0 End ) as CheckPaymentAmount
from TableOrderPayment
Where ( CPayment='Cash' Or CPayment='Check' ) AND CDate<=SYSDATETIME() and CStatus='Active';
select CPaymentType, sum(CAmount)
from TableOrderPayment
where (CPaymentType = 'Cash' and CStatus = 'Active')
or (CPaymentType = 'Check' and CDate <= bsysdatetime() abd CStatus = 'Active')
group by CPaymentType