筛选结果而不影响SQL Server 2017中的所有列

PaP*_*nG0 1 sql t-sql sql-server

我正在使用SQL Server 2017并在此处提出了许多问题,我发现了case一些if - else在SQL 中起作用的语句.这很好,但不能满足我的结果集所需.如果我有一个销售表,其中包含金额,销售日期和项目描述.我想写这样的东西.

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)
Run Code Online (Sandbox Code Playgroud)

我不想在这之外放置一个where子句,因为我不希望它影响其他列的结果.我无法通过case对我所尝试过的陈述来解决这个问题

Tim*_*sen 6

我们可以在这里使用条件聚合,并总结一个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;
Run Code Online (Sandbox Code Playgroud)