SQL - 计算并显示为周数据的列

时间:2015-11-26 13:29:38

标签: sql sqlite

我正在处理的网站上有一份SQL报告,该报告已被要求用作新报告的基础。旧报告获取日期范围内的项目的使用记录,并使用它来计算总重量,并将项目拆分为各自的项目组,以便也可以显示该组的相应总重量使用情况。

我已将代码缩减为基本格式,以详细说明其当前的工作原理

A1

但是,他们要求的新报告会扩展报告,以便将各个周的使用总数也显示为列(第1,2周,... 43)。现在我看到的问题是,SQL必须知道在Date Range中有多少周才能创建列,然后使用where子句等效于查找每周的该日期范围内的值。而且我不知道SQL是否可以实现这一点。

我在谷歌上看了一下,找不到任何有关此事的内容。我希望被证明是错误的,因为这将成为SQL中的强大工具。有人可以告诉我这是否可能?

2 个答案:

答案 0 :(得分:0)

如果不编写动态SQL,我不相信这是可能的。除非你可以依靠有一个上限。如果您可以准备足够的列来覆盖您的上限,您可以执行以下操作:

SELECT
    g.description,
    u.itemcode,
    i.description,
    SUM(CASE
        WHEN (CAST(julianday(date(updatedate)) AS INTEGER) - CAST(julianday(date(@FROM)) AS INTEGER)) / 7 BETWEEN 0 AND 0.9 THEN CAST(i.weight AS REAL) * usage
        ELSE 0.0
    END) AS Week1Weight,
    SUM(CASE
        WHEN (CAST(julianday(date(updatedate)) AS INTEGER) - CAST(julianday(date(@FROM)) AS INTEGER)) / 7 BETWEEN 1 AND 1.9 THEN CAST(i.weight AS REAL) * usage
        ELSE 0.0
    END) AS Week2Weight,
    SUM(CASE
        WHEN (CAST(julianday(date(updatedate)) AS INTEGER) - CAST(julianday(date(@FROM)) AS INTEGER)) / 7 BETWEEN 2 AND 2.9 THEN CAST(i.weight AS REAL) * usage
        ELSE 0.0
    END) AS Week3Weight,
    And so on...

我不熟悉SQLite,所以我可能会遇到一些语法错误。

答案 1 :(得分:0)

您可以使用strftime函数从日期列中获取周数,如:

strftime('%W',date(updatedate)) > @FROM
 AND
strftime('%W',date(updatedate)) <= @TO