T-SQL - 按周进行透视

2024-04-03

我目前正在尝试创建一个 T-SQL,它运行表中的交货列表,并按客户和仓库对它们进行分组 - 因此每一行都将是

客户、仓库、总价值(称为费率的列的总和)

然而,客户希望将“总价值”分为过去 9 周 - 因此,我们将拥有如下列,而不是总价值:

22/01/2012  29/01/2012  05/02/2012  12/02/2012  19/02/2012  26/02/2012  04/03/2012  11/03/2012  18/03/2012

当他们运行查询时,日期当然会改变 - 这只是过去 9 周。他们还想要一个用于显示所有这些平均值的列。

我知道枢轴可能对我有帮助,但我对如何做到这一点有点困惑。这是我当前的查询:

SELECT d.Name AS 'Depot, s.Name AS 'Customer', SUM(c.Rates) AS 'Total Value'
FROM Deliveries AS c INNER JOIN Account AS s ON c.Customer = s.ID
INNER JOIN Depots AS d ON c.CollectionDepot = d.Letter
GROUP BY d.Name, s.Name

非常感谢!

编辑:这是当前数据的屏幕截图 - 我们不需要最后的“总计”列,只是向您展示。 “Date”列出现在“Deliveries”表中,称为“TripDate”


不知道你的确切数据。很难预测你会得到什么。但我可以给你一个解决方案的建议。

表结构

CREATE TABLE Deliveries
(
    Customer INT,
    CollectionDepot INT,
    Rates FLOAT,
    TripDate DATETIME
)
CREATE TABLE Account
(
    Name VARCHAR(100),
    ID INT
)
CREATE TABLE Depots
(
    Name VARCHAR(100),
    Letter INT
)

测试数据

INSERT INTO Deliveries
VALUES
    (1,1,452,GETDATE()-10),
    (1,1,800,GETDATE()-30),
    (1,1,7895,GETDATE()-2),
    (1,1,451,GETDATE()-2),
    (1,1,478,GETDATE()-89),
    (1,1,4512,GETDATE()-31),
    (1,1,782,GETDATE()-20),
    (1,1,652,GETDATE()-5),
    (1,1,752,GETDATE()-452)

INSERT INTO Account
VALUES
    ('Customer 1',1)

INSERT INTO Depots
VALUES
    ('Depot 1',1)

包含范围和格式化日期的表

CREATE TABLE #tmp
(
    StartDate DATETIME,
    EndDate DATETIME,
    FomatedDate VARCHAR(20)
)

计算日期范围

;WITH Nbrs ( n ) AS (
        SELECT 0 UNION ALL
        SELECT 1+n FROM Nbrs WHERE n < 8 )
INSERT INTO #tmp
SELECT
    DATEADD(WEEK,-n-1,GETDATE()),
    DATEADD(WEEK,-n,GETDATE()),
    convert(varchar, DATEADD(WEEK,-n,GETDATE()), 112)
FROM
    Nbrs
ORDER BY
    -n

数据透视表的日期列

DECLARE @cols VARCHAR(MAX)
SELECT  @cols = COALESCE(@cols + ','+QUOTENAME(FomatedDate),
                     QUOTENAME(FomatedDate))
FROM 
    #tmp

声明一些动态sql并执行它

DECLARE @query NVARCHAR(4000)=
N'SELECT
    *
FROM
(
    SELECT 
        Depots.Name AS Depot, 
        Account.Name AS Customer, 
        Deliveries.Rates,
        tmp.FomatedDate,
        AVG(Deliveries.Rates) OVER(PARTITION BY 1) AS Average,
        SUM(Deliveries.Rates) OVER(PARTITION BY 1) AS Total
    FROM 
        Deliveries
        JOIN Account 
            ON Deliveries.Customer = Account.ID
        JOIN Depots
            ON Deliveries.CollectionDepot = Depots.Letter
        JOIN #tmp AS tmp
            ON Deliveries.TripDate BETWEEN tmp.StartDate AND tmp.EndDate
) AS p
PIVOT
(
    AVG(rates)
    FOR FomatedDate IN ('+@cols+')
) AS pvt'

EXECUTE(@query)

然后自己清理。

DROP TABLE Deliveries
DROP TABLE Account
DROP TABLE Depots
DROP TABLE #tmp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

T-SQL - 按周进行透视 的相关文章

随机推荐

  • 正则表达式用于匹配某些内容(如果前面没有其他内容)

    对于Java中的正则表达式 我想编写一个当且仅当模式前面没有某些字符时才匹配的正则表达式 例如 String s foobar barbar beachbar crowbar bar 我想匹配如果bar前面没有foo 所以输出将是 barb
  • 在 Cocoa/Carbon 中全局隐藏鼠标光标?

    有没有办法全局隐藏 Cocoa 或 Carbon 中所有应用程序的鼠标光标 或者至少用其他东西代替它 编辑 感谢大家的意见 但事实证明 Daniel Jalkut 不久前找到了解决方案 http lists apple com archiv
  • Lisp 中的数组与列表:为什么下面的代码中的列表要快得多?

    我在解决时得到了意想不到的结果欧拉计划中的问题 75 https projecteuler net problem 75 我的代码确实找到了正确的解决方案 但它的行为很奇怪 我的解决方案包括遍历毕达哥拉斯树 巴宁矩阵 https en wi
  • 如何将xml解析为java对象? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用于配置一些规则的XML 它没有复杂的结构 但是这个配置在我的系统中的任何地方使用 所以我想将此XML解析为java对象并设计
  • 使用已删除的名称创建 Azure API 管理会导致名称“已在使用中”错误

    我之前使用 Terraform 创建并随后删除了 Azure API 管理服务 它消失在Azure Portal中 几个小时后 当我尝试使用相同名称重新创建 API 管理时 我在 Azure 门户中收到此错误 name already in
  • R ranger 包中的预测概率

    我正在尝试在 R 中建立一个具有随机森林分类的 模型 通过 Ned Horning 编辑代码 我首先使用randomForest包但后来发现ranger 这保证了更快的计算 首先 我使用下面的代码在拟合模型后获得每个类别的预测概率rando
  • 编译器如何为 C++ 中条件声明的自动变量分配内存?

    假设我有一个函数 根据某些运行时条件创建昂贵的自动对象或创建便宜的自动对象 void foo if runtimeCondition int x 0 else SuperLargeObject y 当编译器为此函数分配堆栈帧的内存时 它是否
  • jquery selectedIndex 不起作用

    我有一个带有许多选择标签的 from 当用户提交表单时 我想检查用户是否为所有选择标签选择一个选项 这是我的 jquery 代码 apForm select each function var this this if this selec
  • Kubernetes 配置映射符号链接 (..data/):有办法避免它们吗?

    我注意到 当我创建并安装包含一些文本文件的配置映射时 容器会将这些文件视为符号链接 data myfile txt 例如 如果我的配置映射名为 tc configs 并包含 2 个名为 stripe1 xml 和 stripe2 xml 的
  • CSS Calc((100%/5)+10px) 不起作用

    好吧 在我的 CSS 中 我正在尝试进行数学计算 calc 100 5 10px 当我这样做时 它不起作用 当我计算时 100 5 它工作得很好 我需要做什么才能让 10px 正常工作 您需要做的是使用正确的语法 calc 100 5 10
  • 如何在 Ionic 框架中使用 CSS 选择器隔离特定平台

    我遇到了一种罕见的情况 尽管考虑到 Android 和 iOS 之间的行为不同 这是可以理解的 我想在我正在 Ionic 框架上开发的 Cordova 应用程序中使用专门针对 iOS 的不同样式 我想知道基于平台隔离选择器的最佳方法 基本上
  • 如何通过azure云服务上的kubernetes检查持久卷的内容

    我已将软件打包到容器中 我需要通过Azure容器服务将容器放入集群 该软件具有目录的输出 src data 我想访问整个目录的内容 搜索后 我必须解决 在azure上使用Blob存储 但是搜索后 我找不到可执行方法 使用持久卷 但是我找到的
  • Python Pygame 游戏灯光

    我正在制作一款 2D 横向卷轴游戏 游戏中的一个物品是火炬 我有一个手臂可以旋转的玩家 我们可以获取手臂的角度 我正在寻找跟随手臂角度的三角形光束形状 我有一些想法 比如在整个屏幕上放置一个 alpha 图像 并根据手臂角度单独从每个像素中
  • 具有扩展方法的 Kotlin 数据绑定

    我正在尝试在 Android 的数据绑定中使用 Kotlin 扩展方法 例如 调用 onclick 处理程序 所以我编写了这段代码 posttest list item xml
  • 输入文件大小和内容在 macOS 上不会更新

    我编写了一个基于网络的小型工具 它使用文件输入来读取不断变化的文件 用户手动选择它 一次 JavaScript 会跟踪它的更改时间 上次文件修改时间和文件大小 如果已更改 则会再次读取文件内容 这在 Windows 上的所有浏览器中都可以正
  • PHP AWS SDK 3错误:AWS HTTP错误:cURL错误6:无法解析主机:s3.oregon.amazonaws.com

    我正在尝试连接到 AWS 版本 3 SDK 存储桶 但是 我收到以下错误 PHP 致命错误 未捕获异常 Aws S3 Exception S3Exception 并显示消息 在 上执行 PutObject 时出错 https s3 oreg
  • 我如何在 codeigniter 中创建一个虚荣网址

    我如何在 codeigniter 中创建一个虚荣网址 我在框架中执行此操作确实遇到困难 而且似乎没有任何好的答案 有可能 我正在我的一个项目中使用它 这是 CodeIgniter 论坛上的一个帖子 展示了如何做到这一点 http codei
  • 您遇到过的最好的源代码注释是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 .NET Core 时是否需要 AssemblyInfo?

    之前 AssemblyInfo cs文件是由 Visual Studio 自动创建的 用于包含程序集范围的属性 如 AssemblyVersion AssemblyName 等 在 NET Core 和 ASP NET Core 中 pro
  • T-SQL - 按周进行透视

    我目前正在尝试创建一个 T SQL 它运行表中的交货列表 并按客户和仓库对它们进行分组 因此每一行都将是 客户 仓库 总价值 称为费率的列的总和 然而 客户希望将 总价值 分为过去 9 周 因此 我们将拥有如下列 而不是总价值 22 01