微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

T-SQL 数据透视库存按天范围老化

如何解决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”:

>30天
物品名称 0-10 天 11-20 天 21-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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?