我正在处理的网站上有一份SQL报告,该报告已被要求用作新报告的基础。旧报告获取日期范围内的项目的使用记录,并使用它来计算总重量,并将项目拆分为各自的项目组,以便也可以显示该组的相应总重量使用情况。
我已将代码缩减为基本格式,以详细说明其当前的工作原理
A1
但是,他们要求的新报告会扩展报告,以便将各个周的使用总数也显示为列(第1,2周,... 43)。现在我看到的问题是,SQL必须知道在Date Range中有多少周才能创建列,然后使用where子句等效于查找每周的该日期范围内的值。而且我不知道SQL是否可以实现这一点。
我在谷歌上看了一下,找不到任何有关此事的内容。我希望被证明是错误的,因为这将成为SQL中的强大工具。有人可以告诉我这是否可能?
答案 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