前提:我们有一个包含5个字段的表。 2个字段总是唯一的。基于条件计数的SQL查询(可以包含pl/sql位)
什么是履行一个很好的办法:
如果(count_of_result == 3){ 来自同一个表中添加了3行。将唯一值加起来&假设所有3行的非唯一值都相同。 查询结果应显示1行,并将值加起来。 } else {
像往常一样显示查询的所有结果。
}
谢谢。
前提:我们有一个包含5个字段的表。 2个字段总是唯一的。基于条件计数的SQL查询(可以包含pl/sql位)
什么是履行一个很好的办法:
如果(count_of_result == 3){ 来自同一个表中添加了3行。将唯一值加起来&假设所有3行的非唯一值都相同。 查询结果应显示1行,并将值加起来。 } else {
像往常一样显示查询的所有结果。
}
谢谢。
有可能是这更有效的方法:
SELECT a,b,c, SUM(d) AS d, SUM(e) AS e
FROM tableT
WHERE (SELECT COUNT(*) FROM tableT) <= 3
GROUP BY a,b,c
UNION ALL
SELECT a,b,c,d,e
FROM tableT
WHERE (SELECT COUNT(*) FROM tableT) > 3
;
甜美!这似乎非常完美。谢谢 – radeon 2011-03-15 14:40:48
select a, b, c, sum(d), sum(e) from (
select a, b, c,
case count(*) over(partition by a, b, c)
when 3 then null else rownum end as group_controller
from tableT
) group by a, b, c, group_controller;
我认为这应该有效。内联视图中包含的分析函数确定组中是否会有正好3行(不含聚合)。外部查询的group by需要do_group在应该执行分组的情况下为空(或任何常数值)(因此推迟到用于分组的&b),或者在分组应该被中和时的唯一值(rownum在此会很好地完成情况)。
谢谢你的详细解答,我觉得这很接近最终的解决方案。但是,是不是“特定于t-sql的”分区“?另外,总和(d)和总和(e)是否在给定的解决方案中起作用? – radeon 2011-03-15 08:58:35
阅读有关如何使用'GROUP BY'和'SUM(场)'函数。 – 2011-03-15 07:27:41
'SELECT a,b,c,SUM(d),SUM(e)FROM tableT GROUP BY a,b,c;',其中'd,e'是唯一字段。 – 2011-03-15 07:30:11
听起来不错。 “计数条件”如何,我们需要在计数小于或等于3的情况下才能完成总计和小组。 – radeon 2011-03-15 07:42:07