2017-09-19 55 views
2

有沒有方法來聚合字符串值,如果它是唯一的或返回NULL。例如,給定表 「STUFF」:如何聚合唯一字符串值或NULL

Col_A | Col_B | Col_C | Col_D 
    1 | Foo | Bar |  6 
    2 | Foo | NoBar |  0 
    2 | Foo | Foo |  4 
    1 | Foo | Bar |  6 

所以這個SQL

SELECT SUM(COL_A), STR_AGG_FUNC(COL_B), STR_AGG_FUNC(COL_C),SUM(COL_D) FROM STUFF 

將返回:

Col_A | Col_B | Col_C | Col_D 
    6 | Foo | NULL | 16 

回答

6

您可以用max和那些一個case語句做到這一點列。

select 
    Col_A = sum(Col_A) 
    ,Col_B = case when max(Col_B) = min(Col_B) then max(Col_B) else null end 
    ,Col_C = case when max(Col_C) = min(Col_C) then max(Col_C) else null end 
    ,Col_D = sum(Col_D) 
From 
    Stuff 
+0

有沒有性能上的損失,因爲固有的類型轉換的這種做法?在生產中,我的桌子很大。 – mjenkins

+0

這裏沒有真正的固有類型轉換。它只是使用列的區分大小寫順序來返回第一個/最後一個。這與訂單varchar列的順序相同。 'b'只是基於它們的Unicode值(或者類似的ASCII十進制或十六進制或十進制順序)來到'A'之前。但是,總體功能可能會造成一般性徵稅。指標顯然是最大/最小的一個因素。 – scsimon