我有一个要求,其中有四个参数。 P1,P2,P3,P4。用户可以输入单个或组合中的任何一个。我想只显示他通过求和和分组输入的列。其他列应该被排除。我怎么能这样做?
答案 0 :(得分:1)
这样的事可能适合你(我不是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语句。
答案 1 :(得分:0)
如果你想在mysql中使用类似group_concat的东西,这可以提供帮助 Is there an Oracle SQL query that aggregates multiple rows into one row?
答案 2 :(得分:0)
使用动态SQL可以解决此问题。在动态SQL中,您可以首先根据输入参数构造select语句,然后使用例如执行查询来执行查询。执行立即。请阅读有关如何使用动态SQL的oracle documentation。