DB2 SQL查询按周分组
我正在使用VB.NET编写ASP.NET web表单页。我正在编写代码,以便在折线图上使用,但我似乎无法每周将查询分组。我的问题是:DB2 SQL查询按周分组,sql,asp.net,vb.net,db2,Sql,Asp.net,Vb.net,Db2,我正在使用VB.NET编写ASP.NET web表单页。我正在编写代码,以便在折线图上使用,但我似乎无法每周将查询分组。我的问题是: SELECT F42119LA.SDMCU || '-' || F42119LA.SDLNTY AS BranchCode, AVG(F42119la.SDIVD-F42119LA.SDDRQJ) AS Days, WEEK(SDTRDJ) AS Day FROM KAI400.KAIPRDDTA.EXCHBYDATE EXCHBYD
SELECT F42119LA.SDMCU || '-' || F42119LA.SDLNTY AS BranchCode,
AVG(F42119la.SDIVD-F42119LA.SDDRQJ) AS Days,
WEEK(SDTRDJ) AS Day
FROM KAI400.KAIPRDDTA.EXCHBYDATE EXCHBYDATE,
KAI400.KAIPRDDTA.F42119L14 F42119LA
WHERE F42119LA.SDBCRC = EXCHBYDATE.CXCRCD
AND EXCHBYDATE.EXCHDATE = F42119LA.SDTRDJ
AND F42119LA.SDTRDJ>='118006'
AND F42119LA.SDTRDJ<='118096'
AND F42119LA.SDNXTR<>'999'
AND SDIVD <> 0
AND SDDRQJ <> 0
AND F42119LA.SDAEXP <> 0
AND EXCHBYDATE.CXCRDC='USD'
AND F42119LA.SDLNTY IN ('S','W')
AND (SDMCU LIKE '%100' OR SDMCU LIKE '%150')
GROUP BY SDMCU,
SDLNTY,
SDIVD,
F42119LA.SDMCU || '-' || F42119LA.SDLNTY,
WEEK(SDTRDJ)
ORDER BY SDIVD,
SDMCU,
SDLNTY
ONDATE是格式为MM/DD/YYYY的日期字段。是否有人知道另一种每周分组的方法,或者是什么可能会给我这个错误?提前感谢您的回复。DATEPART()
可能是SQL Server中的函数,但不是Db2中的函数。您可以使用WEEK()
或WEEK\u ISO()
这两个Db2函数
-- date part takes the part of the date as first paramater:
-- you have:
DATEPART(SDTRDJ, wk)
-- needs to be:
DATEPART(wk, SDTRDJ)
如果您使用的是最新版本的DB2LUW,那么还可以使用EXTRACT
顺便说一句,您不需要按
F42119LA.SDMCU | | |'-'| | F42119LA.SDLNTY
的串联进行分组,您可以按这些列单独分组,并且只能在选择框中按concat进行分组 这样更好吗?您确定使用的是SQL Server吗?SQL Server不使用|
进行连接,并且该错误消息看起来与SQL Server中的错误消息不同您的查询对于SQL Server来说根本不是有效的语法,什么是DATEPART(wl
?它在Oledb读取器中运行。这是一个打印错误,应该是“wk”,这是我第一次尝试的方式,它给了我相同的错误。你确定这是SQL Server吗?因为我运行了它,得到了14:SELECT DATEPART(wk,GETDATE())虽然你有,例如,F42119LA.SDTRDJ>='118006'
,这意味着SDTRDJ
不是一个日期
,所以你需要将它转换为一个日期来应用上面的week函数。我可以将它设置为实际日期并使用week()/week\u ISO()函数,但它给了我一个错误,“无法启用约束”这听起来不像是DB2错误。stackoverflow搜索提示这是asp.net错误。您正在按不在选择列表中的列进行分组,因此很可能会在输出中得到重复的行。这是错误的原因吗?我能够找出约束问题,现在它给了我以下错误:值In日期、时间或时间戳字符串无效您可能需要检查所有值是否可转换为日期。例如,检查您的SDTRDJ中没有任何值,例如000000
或999999
。或者使用类似的方法查找任何不能转换为日期的值
Value in date, time, or timestamp string not valid
-- date part takes the part of the date as first paramater:
-- you have:
DATEPART(SDTRDJ, wk)
-- needs to be:
DATEPART(wk, SDTRDJ)
db2 "values extract(WEEK FROM current date)"
1
-----------
14
1 record(s) selected.