DB2 SQL查询按周分组

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

我正在使用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 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.