【发布时间】:2018-04-11 22:36:51
【问题描述】:
我正在使用 tomcat、jsp 和 MSSQL 2008,并且想要获取一些汇总数据,例如 Daily、Weekly、Monthly 和 Yearly。 从这里,我搜索了如何将 datapart() 函数用于这些来自 MSSQL 的摘要数据。 在 JSP 中,我使用了
PreparedStatement pr = conn.prepareStatement(query);
ResultSet rs=pr.executeQuery();
在 MSMS 中,查询目录进行测试。
我在 JSP 程序中遇到了两个问题,但在 MS SQL Server Management Studio 中使用相同的查询运行良好。
This is a screenshot of query result in MSMS
我的问题是:
- “每年”的查询在 JSP 中不起作用。
- 在查询“每月”时,不返回月份值(1,2,3,...) 正确,但只有 0(零)。
“每日”和“每周”运行良好。我该如何解决这些问题? 提前致谢。
我的查询是:
switch (unit)
{
case "Daily" :
query = "SELECT cast(datepart(dy, ProcessDate) as varchar(3)) Day, " +
"cast(year(ProcessDate) as varchar(4)) Year, " +
"SUM(case WHEN Warranty = 'Y' then 1 else 0 end) InWarranty, " +
"SUM(case WHEN Warranty = 'N' then 1 else 0 end) OutOfWarranty, " +
"SUM(case WHEN Warranty = 'X' then 1 else 0 end) NAWarranty " +
"FROM zz_RMA_Summary " +
"WHERE ProcessDate BETWEEN '" + sDate + "' AND '" + eDate + "' " +
"group by year(ProcessDate), datepart(dy, ProcessDate) " +
"order by year(ProcessDate) DESC, datepart(dy, ProcessDate) DESC ";
break;
case "Weekly" :
query = "SELECT cast(datepart(wk, ProcessDate) as varchar(2)) Week, " +
"cast(year(ProcessDate) as varchar(4)) Year, " +
"SUM(case WHEN Warranty = 'Y' then 1 else 0 end) InWarranty, " +
"SUM(case WHEN Warranty = 'N' then 1 else 0 end) OutOfWarranty, " +
"SUM(case WHEN Warranty = 'X' then 1 else 0 end) NAWarranty " +
"FROM zz_RMA_Summary " +
"WHERE ProcessDate BETWEEN '" + sDate + "' AND '" + eDate + "' " +
"group by year(ProcessDate), datepart(wk, ProcessDate) " +
"order by year(ProcessDate) DESC, datepart(wk, ProcessDate) DESC ";
break;
case "Monthly" :
query = "SELECT cast(datepart(mm, ProcessDate) as varchar(2)) Month, " +
"cast(year(ProcessDate) as varchar(4)) Year, " +
"SUM(case WHEN Warranty = 'Y' then 1 else 0 end) InWarranty, " +
"SUM(case WHEN Warranty = 'N' then 1 else 0 end) OutOfWarranty, " +
"SUM(case WHEN Warranty = 'X' then 1 else 0 end) NAWarranty " +
"FROM zz_RMA_Summary " +
"WHERE ProcessDate BETWEEN '" + sDate + "' AND '" + eDate + "' " +
"group by year(ProcessDate), datepart(mm, ProcessDate) " +
"order by year(ProcessDate) DESC, datepart(mm, ProcessDate) DESC ";
break;
case "Yearly" :
query = "SELECT cast(yyyyy, ProcessDate) as varchar(4)) Year, " +
"SUM(case WHEN Warranty = 'Y' then 1 else 0 end) InWarranty, " +
"SUM(case WHEN Warranty = 'N' then 1 else 0 end) OutOfWarranty, " +
"SUM(case WHEN Warranty = 'X' then 1 else 0 end) NAWarranty " +
"FROM zz_RMA_Summary " +
"WHERE ProcessDate BETWEEN '" + sDate + "' AND '" + eDate + "' " +
"group by datepart(yyyy, ProcessDate) " +
"order by datepart(yyyy, ProcessDate) DESC ";
break;
}
【问题讨论】:
标签: java sql-server jsp