好的,我正在使用hibernate在我的SpringBoot应用程序中运行下面的SQL本机查询,请注意这个查询在SQL Management Studio中运行良好,并返回一些结果。在我的IDE中,我可以使用JDBC驱动程序连接到我的SQL Server2017,我仍然可以运行这个查询并返回一些结果,现在是奇怪的部分,当相同的查询在应用程序中运行时,我会得到以下错误:
SELECT CASE WHEN (suc.transaction_time IS NOT NULL) THEN suc.transaction_time ELSE err.transaction_time END as transaction_time, CASE WHEN (suc.success_count IS NOT NULL) THEN suc.success_count ELSE 0 END as success_count, CASE WHEN (err.error_count IS NOT NULL) THEN err.error_count ELSE 0 END as error_count FROM ( SELECT COUNT(et.status) error_count, DATEADD(MINUTE, FLOOR(DATEDIFF(MINUTE, 0, et.time_in) / 1440) * 1440, 0) AS transaction_time FROM ESB_TRANSACTION et WHERE (et.status='ERROR') AND (et.time_in BETWEEN '2019-01-01 00:00:00' AND '2019-12-12 23:59:59') GROUP BY DATEADD(MINUTE, FLOOR(DATEDIFF(MINUTE, 0, et.time_in) / 1440) * 1440, 0) ) err RIGHT OUTER JOIN ( SELECT COUNT(et.status) success_count, DATEADD(MINUTE, FLOOR(DATEDIFF(MINUTE, 0, et.time_in) / 1440) * 1440, 0) AS transaction_time FROM ESB_TRANSACTION et WHERE (et.status='SUCCESS') AND (et.time_in BETWEEN '2019-01-01 00:00:00' AND '2019-12-12 23:59:59') GROUP BY DATEADD(MINUTE, FLOOR(DATEDIFF(MINUTE, 0, et.time_in) / 1440) * 1440, 0) ) suc ON err.transaction_time = suc.transaction_time ORDER BY transaction_time ASC
`public List execute(final String query, final DateRange selectedRange, final int minutes) { return (List) repository.getEntityManager() .createNativeQuery(query) .setParameter("startTime", selectedRange.getFrom()) .setParameter("endTime", selectedRange.getTo()) .setParameter("periodInterval", minutes ) .getResultList(); }
try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();) { String contents = new String(Files.readAllBytes(Paths.get("C:\\Temp\\mssqlserver.sql"))); ResultSet rs = stmt.executeQuery(contents); while (rs.next()) { System.out.println(rs.getString("transaction_time") + " =>" + rs.getInt("success_count") +" =>"+ rs.getInt("error_count")); } } catch (IOException | SQLException e) { e.printStackTrace(); }
我实际上得到了适当的输出,那么我的春靴+冬眠有什么问题呢?
试试这个,
SELECT
CASE WHEN (suc.transaction_time IS NOT NULL) THEN suc.transaction_time ELSE err.transaction_time END as transaction_time,
CASE WHEN (suc.success_count IS NOT NULL) THEN suc.success_count ELSE 0 END as success_count,
CASE WHEN (err.error_count IS NOT NULL) THEN err.error_count ELSE 0 END as error_count
FROM
(
SELECT
COUNT(et.status) error_count, et.time_in AS transaction_time
FROM
(
SELECT
eti.status,
DATEADD(MINUTE, FLOOR(DATEDIFF(MINUTE, 0, eti.time_in) / 1440) * 1440, 0) AS time_in
FROM ESB_TRANSACTION eti
WHERE
(eti.status='ERROR') AND (eti.time_in BETWEEN '2019-01-01 00:00:00' AND '2019-12-12 23:59:59')
) et
GROUP BY et.time_in
) err
RIGHT OUTER JOIN
(
SELECT
COUNT(et.status) success_count, et.time_in AS transaction_time
FROM
(
SELECT eti.status,
DATEADD(MINUTE, FLOOR(DATEDIFF(MINUTE, 0, eti.time_in) / 1440) * 1440, 0) AS time_in
FROM ESB_TRANSACTION eti
WHERE
(eti.status='SUCCESS') AND (eti.time_in BETWEEN '2019-01-01 00:00:00' AND '2019-12-12 23:59:59')
) et
GROUP BY et.time_in
) suc ON err.transaction_time = suc.transaction_time
ORDER BY transaction_time ASC
注意:我没有SQLServer,也没有在其他数据库上使用它。但它应该按原样运行;如果不是,那么它可能需要一些小的语法修复。然而,结果应该是预期的。无论如何,它肯定会给你一个主意。希望是好的。
我有一个如下所示的查询 但当我执行上面的sql时,出现了一个错误: 预期结果: 上面的SQL有什么问题?
我们有一个表,它将捕获每个的刷卡记录。我正在尝试编写一个查询,以获取今天第一次刷取的非重复员工记录列表。 我们正在列中保存刷卡日期信息。下面是我的查询,它抛出异常。 获取错误: 列“interface.dbo.vwempSwipeDetail.Employee First Name”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 有什么需要帮忙的吗? 提前道谢。
问题内容: 我正在尝试返回一个表格,其中包含使用嵌套集模型表示的层次结构中节点的深度,我正在按照本教程进行操作,但是“查找节点的深度”部分中使用的查询对我不起作用:http://mikehillyer.com/articles/managing- hierarchical-data-in-mysql/ 运行此查询,我得到一个错误“ 列’CompanyGroup.GroupName’在选择列表中无效
问题内容: 我有一个错误- 选择列表中的“ Employee.EmpID”列无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。 这种情况符合Bill Karwin的回答。 上面的更正,适合ExactaBox的回答- 原始问题- 对于SQL查询- 我不明白为什么会收到此错误。我要做的就是加入表格,然后将特定位置的所有员工分组在一起。 我认为我对自己的问题有部分解释。 告诉我是否还可
我知道这个主题已经讨论了类似的问题,我已经看过了答案,但不幸的是,我只是不知道如何应用于这个查询。我知道将'pe.short_name'添加到GROUP BY也不是处理这个问题的最佳方法。非常感谢任何建议。 列'pe.short_name'在select列表中无效,因为它包含在聚合函数或GROUP BY子句中.`