sql - SQL Server 查询指示在 3 个不同时间段内销售的金额
问题描述
我正在尝试编写一个从表中选择一些数据的 SQL 查询。我想要的数据包括一件商品已售出多少次,目标是让列显示该商品在 30,60 和 90 天内售出多少次。我可以编写 3 个单独的查询来完成这项工作,但我想编写一个查询,以便数据都在一个结果表上。这是我到目前为止所拥有的:
DECLARE @30daysago DATETIME = DATEADD(DAY,-30,CAST(GETDATE() AS DATE));
DECLARE @90daysago DATETIME = DATEADD(DAY,-90,CAST(GETDATE() AS DATE));
Set NOCOUNT ON
Select company_info_1 from setup
select ii.itemnum, i.itemname,i.price, d.description, count(ii.itemnum)
from invoice_itemized ii
join invoice_totals IT on it.invoice_number=ii.invoice_number
join inventory i on i.itemnum=ii.itemnum
join departments d on d.dept_id=i.dept_id
where it.datetime > @30daysago and len(ii.itemnum) >4
group by ii.itemnum, i.itemname, d.description, i.price
order by count(ii.itemnum) desc
解决方案
使用带有条件聚合的单个查询:
SELECT
ii.itemnum,
i.itemname,
i.price,
d.description,
COUNT(ii.itemnum) AS total,
COUNT(CASE WHEN it.datetime > DATEADD(DAY, -30, CAST(GETDATE() AS DATE))
THEN ii.itemnum END) AS 30daysago,
COUNT(CASE WHEN it.datetime > DATEADD(DAY, -90, CAST(GETDATE() AS DATE))
THEN ii.itemnum END) AS 90daysago
FROM invoice_itemized ii
INNER JOIN invoice_totals IT
ON it.invoice_number = ii.invoice_number
INNER JOIN inventory I
ON i.itemnum = ii.itemnum
INNER JOIN departments d
ON d.dept_id = i.dept_id
WHERE
LEN(ii.itemnum) > 4
GROUP BY
ii.itemnum,
i.itemname,
d.description,
i.price
ORDER BY
ii.itemnum DESC;
推荐阅读
- html - 将容器格式化为圆形会导致椭圆形
- android - Duplicate class in build.gradle file
- javascript - 播放 Google Drive 视频时出现 403 禁止
- php - 从 MySQL 读取 TEXT(非 VARCHAR)字段,PHP 未显示在 HTML textarea 中
- google-chrome - 大约 30 天的 Google Cloud
- javascript - 除了使用 Java Script GTM 标记(使用 Google Analytics 跟踪个人登录用户)的综合浏览量之外,如何发送事件?
- ruby-on-rails - 如何使用输入日期创建记录并使用 ROR 保存参数?
- paypal - 支付宝转账金额问题
- vue.js - Vue:在动态组件上同时使用 click 和 click.native?
- python - Python 桌面通知程序的多个通知