如何解决T-SQL 数据透视库存按天范围老化
编写 T-sql 语句以显示按天数范围(枢轴)划分的库存中的项目。
例如来自此库存表:
物品名称 | 创建日期 | PO_ID |
---|---|---|
A | 2020-10-07 | 0 |
B | 2020-10-07 | 1 |
A | 2020-10-22 | 2 |
A | 2020-10-22 | 2 |
A | 2020-10-22 | 2 |
B | 2020-10-29 | 3 |
想要生成以下结果(通常是数据透视表),显示每天范围内每 ItemName
的件数。用于计算自 DateCreated
以来的天数的日期将是报告运行或作为参数传入的日期 - 在此处显示的示例中,使用的日期来自“2020-11-07”:
物品名称 | 0-10 天 | 11-20 天 | 21-30 天 | >30天|
---|---|---|---|---|
A | 0 | 3 | 0 | 1 |
B | 1 | 0 | 0 | 1 |
不确定编写语句以生成上述结果的最佳方式是什么?
解决方法
我会使用条件聚合:
select itemName,sum(case when datediff(day,dateCreated,getdate()) <= 10 then 1 else 0 end) as days_0_10,getdate()) > 10 and
datediff(day,getdate()) <= 20
then 1 else 0 end) as days_11_20,getdate()) > 20 and
datediff(day,getdate()) <= 30
then 1 else 0 end) as days_21_30,getdate()) > 30 then 1 else 0 end) as days_31
from t
group by itemName
,
我将使用类似于以下查询 SQL Server 的内容:
SELECT *
FROM
(
SELECT [ItemName],[PO_ID],CASE
WHEN DATEDIFF(day,DateCreated,getdate()) BETWEEN 0 AND 10 THEN '0-10 days'
WHEN DATEDIFF(day,getdate()) BETWEEN 11 AND 20 THEN '11-20 days'
WHEN DATEDIFF(day,getdate()) BETWEEN 21 AND 30 THEN '21-30 days'
ELSE '>30 days'
END AS PeriodCreated
FROM [TableName])
) src
pivot
(
COUNT(PO_ID)
FOR PeriodCreated in ([0-10 days],[11-20 days],[>30 days])
) piv
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。