首页 > 解决方案 > 筛选结果而不影响 SQL Server 2017 中的所有列

问题描述

我正在使用 SQL Server 2017,通过在这里提出许多问题,我发现了在 SQLcase中起作用的语句if - else。这很好,但不能满足我对结果集的需求。如果我有一个包含金额、销售日期和商品描述的销售表。我正在尝试写这样的东西。

Select 
    sum(amount) -- total amount, 
    count(date_of_sale) -- number of days selling
    sum(amount where date_of_sale between certain date and certain date)

我不想在此之外放置 where 子句,因为我不希望它影响其他列的结果。我无法使用case我尝试过的声明来解决这个问题

标签: sqlsql-servertsql

解决方案


我们可以在这里使用条件聚合,并对一个CASE表达式求和,其中仅包含您感兴趣的日期范围内的金额。

SELECT
    SUM(amount) AS total_sales,
    COUNT(date_of_sale) AS total_items,
    SUM(CASE WHEN date_of_sale BETWEEN start_date AND end_date
             THEN amount ELSE 0 END) AS partial_sales,
    COUNT(CASE WHEN date_of_sale BETWEEN start_date AND end_date
               THEN 1 END) AS partial_items
FROM yourTable;

推荐阅读