Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
如何在T-SQL中对多个条件求和?_Sql_Sql Server - Fatal编程技术网

如何在T-SQL中对多个条件求和?

如何在T-SQL中对多个条件求和?,sql,sql-server,Sql,Sql Server,我正在努力提高基本的SQL查询技能,并在SQL Server 2012中使用AdventureWorks2012示例数据库。我在(按分区)上使用了SUM()如下: SELECT DISTINCT SUM(SubTotal) OVER (PARTITION BY CustomerID), CustomerID FROM Sales.SalesOrderHeader 为了获得每个客户的总销售价值,我想使用year(OrderDate)对客户和年份的小计进行求和,以提取订单日期的

我正在努力提高基本的SQL查询技能,并在SQL Server 2012中使用AdventureWorks2012示例数据库。我在(按分区)上使用了
SUM()
如下:

SELECT DISTINCT 
    SUM(SubTotal) OVER (PARTITION BY CustomerID), CustomerID
FROM 
    Sales.SalesOrderHeader
为了获得每个客户的总销售价值,我想使用
year(OrderDate)
对客户和年份的
小计进行求和,以提取订单日期的年份部分

首先,我似乎无法使用订单日期的年份部分独立于客户按年份求和,因此这种方法无论如何都不起作用

其次,我看不到任何使用多个分区标准的方法

我怀疑我的经验不足导致我以错误的方式思考这个问题,因此理论方法和具体解决方案一样有用


我想我正在寻找功能上类似于Excel的
SUMIFS()
函数的东西首先,编写查询的正确方法是:

SELECT CustomerID, SUM(SubTotal)
FROM Sales.SalesOrderHeader
GROUP BY CustomerID;
在窗口函数中使用
SELECT DISTINCT
,这很聪明。但是,它会使查询过于复杂,性能可能会较差,并且会让任何阅读它的人感到困惑

要按年度(针对每个客户)获取信息,只需将其添加到
选择
分组依据中即可:

SELECT CustomerID, YEAR(OrderDate) as yyyy, SUM(SubTotal)
FROM Sales.SalesOrderHeader
GROUP BY CustomerID, YEAR(OrderDate)
ORDER BY CustomerId, yyyy;

如果您真的想得到单独的小计行,那么请研究
分组集
汇总
。这些是
分组依据
的选项

您应该使用
分组依据
,而不是
分区依据
,只要您需要针对特定列(如(customerid)进行聚合(
sum/count/max
),如下所示

select customerId, sum(subTotal)
FROM sales.salesOrderHeader
group by customerId
编辑:包括缺少日期要求(回复评论)

如果要针对多个列进行计算,仍然可以使用相同的方法。只需在GROUPBY子句中将
日期添加为
GROUPBY customerId,saleDate

select customerId, sum(subTotal)
,saleDate //=> you can miss it (date) from selection if you want to
FROM sales.salesOrderHeader
group by customerId, saleDate

谢谢你,戈登,非常感谢-我想我是想在走路之前跑!我不知道标准GROUP BY的这些扩展,并将更深入地研究它们,尽管您的代码似乎做了我想要做的事情,因为我感谢Sami的快速响应,但这没有满足我根据日期和客户ID求和的要求。我确实理解您关于GROUP BY的观点,并将进一步探讨以改进我的(有限!)理解力