2011-03-15 55 views
0

前提:我們有一個包含5個字段的表。 2個字段總是唯一的。基於條件計數的SQL查詢(可以包含pl/sql位)

什麼是履行一個很好的辦法:

如果(count_of_result == 3){ 來自同一個表中添加了3行。將唯一值加起來&假設所有3行的非唯一值都相同。 查詢結果應顯示1行,並將值加起來。 } else {

像往常一樣顯示查詢的所有結果。

}

謝謝。

+0

閱讀有關如何使用'GROUP BY'和'SUM(場)'函數。 – 2011-03-15 07:27:41

+0

'SELECT a,b,c,SUM(d),SUM(e)FROM tableT GROUP BY a,b,c;',其中'd,e'是唯一字段。 – 2011-03-15 07:30:11

+0

聽起來不錯。 「計數條件」如何,我們需要在計數小於或等於3的情況下才能完成總計和小組。 – radeon 2011-03-15 07:42:07

回答

0

有可能是這更有效的方法:

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 
; 
+0

甜美!這似乎非常完美。謝謝 – radeon 2011-03-15 14:40:48

0
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在此會很好地完成情況)。

+0

謝謝你的詳細解答,我覺得這很接近最終的解決方案。但是,是不是「特定於t-sql的」分區「?另外,總和(d)和總和(e)是否在給定的解決方案中起作用? – radeon 2011-03-15 08:58:35