前提:我們有一個包含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