Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 在where子句中添加子条件_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 在where子句中添加子条件

Sql 在where子句中添加子条件,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我不确定where子句中对该条件的正确名称。我正在使用Microsoft SQL Server 2008 基本上,我有一个包含以下列的订单表 MyOrderTable: OrderAmount Paid OrderDate 100 Y 2016-08-10 21:15:52.000 120 N 2016-08-10 20:15:12.000 300 Y 2016-08-09 11:10:22.000 500

我不确定where子句中对该条件的正确名称。我正在使用Microsoft SQL Server 2008

基本上,我有一个包含以下列的订单表

MyOrderTable:

OrderAmount Paid    OrderDate
100         Y       2016-08-10 21:15:52.000
120         N       2016-08-10 20:15:12.000
300         Y       2016-08-09 11:10:22.000
500         Y       2016-06-09 10:10:54.000
125         N       2016-06-09 09:15:13.000 
325         N       2015-11-09 09:15:13.000
目前,我有以下SQL查询:

SELECT DATEPART(Year, OrderDate) TheYear, DATEPART(Month, OrderDate) TheMonth,
       SUM(ISNULL(OrderAmount, 0)) as SumOrderAmount
FROM MyOrderTable
WHERE YEAR(OrderDate) = 2016
GROUP BY DATEPART(Year, OrderDate), DATEPART(Month, OrderDate)
ORDER BY TheYear, TheMonth
上述SQL返回的结果如下所示:

TheYear     TheMonth    SumOrderAmount
2016        6           625
2016        8           520
我如何查询行付款的SumOrderAmount='Y'?我想从SQL返回以下内容:

TheYear     TheMonth    SumOrderAmount  PaidSumOrderAmount
2016        6           625             500
2016        8           520             400

我该怎么做?非常感谢您的帮助。谢谢。

使用
大小写
表达式执行有条件的
求和()


使用
case
表达式执行条件
SUM()


使用条件聚合:

SELECT DATEPART(Year, OrderDate) TheYear, DATEPART(Month, OrderDate) TheMonth,
       SUM(ISNULL(OrderAmount, 0)) as SumOrderAmount,
       SUM(CASE WHEN Paid = 'Y' THEN OrderAmount ELSE 0 END) as PaidOrderAmount
FROM MyOrderTable
WHERE YEAR(OrderDate) = 2016
GROUP BY DATEPART(Year, OrderDate), DATEPART(Month, OrderDate)
ORDER BY TheYear, TheMonth;

您可能不需要
SUM()
中的
ISNULL()。在SQL中,
SUM()聚合函数中的
NULL
值被忽略。

使用条件聚合:

SELECT DATEPART(Year, OrderDate) TheYear, DATEPART(Month, OrderDate) TheMonth,
       SUM(ISNULL(OrderAmount, 0)) as SumOrderAmount,
       SUM(CASE WHEN Paid = 'Y' THEN OrderAmount ELSE 0 END) as PaidOrderAmount
FROM MyOrderTable
WHERE YEAR(OrderDate) = 2016
GROUP BY DATEPART(Year, OrderDate), DATEPART(Month, OrderDate)
ORDER BY TheYear, TheMonth;

您可能不需要
SUM()
中的
ISNULL()。在SQL中,
SUM()聚合函数中的
NULL
值被忽略。

在select上添加此子句:

SUM(CASE WHEN Paid='Y' THEN OrderAmount ELSE 0 END) AS PaidSumOrderAmount

在select上添加此子句:

SUM(CASE WHEN Paid='Y' THEN OrderAmount ELSE 0 END) AS PaidSumOrderAmount


所以说了之后,他也不需要
ELSE 0
:)@sagi。相反。当没有匹配项时,需要防止
NULL
值,因为假设一个月没有支付金额是合理的。另一方面,如果一个月的所有已付金额都是
NULL
,那么总数也需要它。考虑到提供的数据,这似乎不太可能。如果OP有几个月没有付费销售,这可能比空值(而不是0)更大。这正是我要找的。非常感谢你的帮助。不管怎样,为什么我的问题会得到-1分呢?这么说之后,他也不需要
ELSE 0
:)@sagi。相反。当没有匹配项时,需要防止
NULL
值,因为假设一个月没有支付金额是合理的。另一方面,如果一个月的所有已付金额都是
NULL
,那么总数也需要它。考虑到提供的数据,这似乎不太可能。如果OP有几个月没有付费销售,这可能比空值(而不是0)更大。这正是我要找的。非常感谢你的帮助。不管怎样,为什么我的问题会得到-1?请注意OP希望保持SumOrderAmount列与以前一样。@jarlh抱歉,我不懂英语verrywell@jarlh你的答案和Gordon Linoff是sameI,我也注意到了,但这次我打字快了一点@jarlh很抱歉,兄弟,这件事在我身上发生过很多次。我非常生气,有些人因为我的母语而不尊重我,并且给我带来了问题,我没有任何朋友,也没有与任何人交谈。请注意,OP希望保持SumOrderAmount列与以前一样。@jarlh抱歉,我不太懂英语well@jarlh你的答案和Gordon Linoff是sameI,我也注意到了,但这次我打字快了一点@我非常生气,有些人因为我的母语而不尊重我,给我带来了麻烦,我没有任何朋友,也没有和任何人说话。