sql - 筛选结果而不影响 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
我尝试过的声明来解决这个问题
解决方案
我们可以在这里使用条件聚合,并对一个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;
推荐阅读
- python - 正则表达式:如何将 LaTeX 分数转换为 Python 中的可操作表达式?
- matlab - 在 MATLAB 中计算积分
- c# - 关闭/处置时 SqlDataReader 命令超时
- javascript - 如何抵消 moment.js 时间对象
- postgresql - hstore 使用 pg_restore 恢复 postgres 时出错。怎么修?
- javascript - 更改通用功能子组件的状态
- javascript - JS DOM innerHTML 值不改变 HTML
- regex - 为什么这个正则表达式不匹配我的换行符分隔键=值对?
- python - python中分号的使用?
- django - 保存后如何对文章执行解析和编辑功能?