4

我有一个要求,其中有四个参数。p1,p2,p3,p4。用户可以输入任何一个或组合。我只想显示他通过求和和分组输入的列。其他列应该被排除在外。我该怎么做?

4

3 回答 3

2

像这样的东西可能对你有用(我不是 100% 确定,因为你的问题很模糊)

SELECT
  CASE WHEN :p1 = 0 THEN p1 ELSE NULL END AS p1,
  CASE WHEN :p2 = 0 THEN p2 ELSE NULL END AS p2,
  CASE WHEN :p3 = 0 THEN p3 ELSE NULL END AS p3,
  CASE WHEN :p4 = 0 THEN p4 ELSE NULL END AS p4
FROM
  yourTable
GROUP BY
  CASE WHEN :p1 = 0 THEN p1 ELSE NULL END,
  CASE WHEN :p2 = 0 THEN p2 ELSE NULL END,
  CASE WHEN :p3 = 0 THEN p3 ELSE NULL END,
  CASE WHEN :p4 = 0 THEN p4 ELSE NULL END

但是请注意,SQL 通常在这种类型的查询中执行得很差。

对于每个固定查询,都会编译一个单独的计划。用于生成结果的算法在该点固定到位。更改参数时不会重新编译。

这很重要,因为根据您的索引,GROUP BY p1, p2可能会导致与使用GROUP BY p3, p4.

因此,在代码中重新生成 SQL 语句通常可以提高性能。

与其要求 SQL 使用参数来选择聚合哪些字段,不如使用参数编写全新的 SQL 语句,然后执行该新 SQL 语句。

于 2012-10-22T09:25:15.113 回答
0

如果您想在 mysql 中使用 group concat 之类的东西,这可以提供帮助 是否有一个 Oracle SQL 查询可以将多行聚合为一行?

于 2012-10-22T09:59:27.813 回答
0

这个问题可以通过使用动态SQL来解决。在动态 SQL 中,您可以首先根据输入参数构造您的选择语句,然后使用例如 EXECUTE IMMEDIATE 执行查询。请阅读有关如何使用动态 SQL的oracle 文档。

于 2012-10-23T06:09:01.897 回答