2016-08-16 7 views
1

ich meine Tabellendaten Summen haben wie folgtSQL-Abfrage-Daten basierend auf Kriterien zusammenzufassen

--------------------- 
Building | Area m2 
--------------------- 
|Dante 12 | 10 
|Dante 10 | 5 
|Dante 9 | 2 
|Crandley | 20 
|Bence  | 30 

Ich möchte Baugebiet summieren, sondern Gebäude wie ‚% dante%‘ ich in Summe verbinden wollen „Dante“ wie unten:

------------------- 
Building | Area m2 
------------------- 
Dante | 17 
Crandley | 20 
Bence | 30 
+0

Welche Version von SQL Sie verwenden, als genaue Antwort kann davon abhängen. –

+1

Ich nehme an, dass Sie das nicht nur für "Dante" beheben möchten, und dass Sie tatsächlich mehr Kombination von Zahlen haben können, d. H. "Crandley 8"? – Lamak

Antwort

2

Gruppe von mit Fall wird der Trick für die Probendaten tun gegeben, like dieser Art können Index als auch

Select 
case when building like 'dante%' then 'Dante' else building end, 
sum([area m2]) 
from 
table 
group by 
case when building like 'dante%' then 'Dante' else building end 
verwenden 10

wenn es Zahlen für andere Spalten sind, können Sie zunächst die Zahlen Streifen aus und machen den Rest von Sachen wie unten

;with cte 
as 
(select REPLACE 
(REPLACE 
(REPLACE 
(REPLACE 
(REPLACE 
(REPLACE 
(REPLACE 
(REPLACE 
(REPLACE 
(REPLACE (building, '0', ''), 
'1', ''), 
'2', ''), 
'3', ''), 
'4', ''), 
'5', ''), 
'6', ''), 
'7', ''), 
'8', ''), 
'9', '') as bulding,aream2 
from #temp 
) 
select building,sum(aream2) 
from 
cte 
group by 
building 

Referenzen:
Remove numbers found in string column

+0

vielen dank! Es ist richtige Antwort, es hat funktioniert! –

0

funktioniert nur, wenn numerischer Wert entfernt werden

Numerischer Wert soll ersetzt werden (geschachtelte ersetzen Funktion kann bis zu 32 Ebene tief gehen) und gruppieren nach Spalte.

SELECT x.Building, SUM(x.AreaM2) AS [Area m2] 
FROM (
    SELECT 
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE(
     REPLACE (Building, '0', '') 
     ,'1', '') 
     ,'2', '') 
     ,'3', '') 
     ,'4', '') 
     ,'5', '') 
     ,'6', '') 
     ,'7', '') 
     ,'8', '') 
     ,'9', '') [Building], AreaM2 FROM Buildings) AS x 
GROUP BY x.Building 
+0

und danke auch dafür! –

Verwandte Themen