2017-05-04 6 views
0

Ich habe diese Anfrage:Wählen Sie Abfragegruppe von Alias ​​

SELECT * FROM TABLE1 WHERE AREA_CODE IN ('929', '718', '347', '646') GROUP BY AREA_CODE 

Ist es möglich, nur einen Datensatz Zeile mit dem Namen ‚NEW_YORK_AREA‘ zu erhalten, die Codes alle diese vier Bereich umfasst? Um es klarer zu formulieren, nehmen wir an, Sie haben 4 Datensätze in der Tabelle für jeden der oben aufgeführten Bereiche, aber Sie möchten nur ein Ergebnis (Zeile) mit dem Alias ​​'NEW_YOUR_AREA' erhalten. Ich hoffe, es ist klar, lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben, werde ich die Frage bearbeiten. Danke euch allen und habt einen schönen Tag.

UPDATE: Anforderungen haben sich geändert, und es wird nicht mehr benötigt. Danke Ihnen allen für Ihre Hilfe! :)

+0

Bitte senden Sie die Struktur der Tabelle 1 sowie die Ausgabe, die Sie abrufen möchten. – hisnameismyname2

Antwort

1

DB2 unterstützt listagg(). Also:

SELECT 'NEW_YORK_AREA' as cityname, 
     LISTAGG(AREA_CODE, ',') WITHIN GROUP (ORDER BY AREA_CODE) as areacodes 
FROM TABLE1 
WHERE AREA_CODE IN ('212', '929', '718', '347', '646') ; 

Ich fügte hinzu, helfend 212, die berühmteste Ortsvorwahl NYC;)

Wenn Sie Duplikate haben, dann müssen Sie eine Unterabfrage verwenden, um sie zu entfernen, bevor die Aggregation.

+0

wusste nicht über listagg(), danke. – Foxy

0

Logisch, was Sie wollen, ist Gruppe alles in die gleiche Kategorie. Sie können dies tun, indem sie explizit alle Zeilen durch einen einzigen Wert Gruppierung:

select 'NEW_YORK_AREA', 
     --whatever functions you need to aggregate the data here. 
     count(var1), 
     max(var2) 
    from table1 
    where area_code in ('929', '718', '347', '646') 
    group by 1 

Wenn jedoch die einzigen Funktionen, die auf die Daten in der Tabelle beziehen sich Aggregatfunktionen sind, DB2 können Sie die group by weglassen, und es wird automatisch gruppiere alles in eine Zeile. Im Folgenden entspricht die obige Abfrage:

select 'NEW_YORK_AREA', 
     count(var1), 
     max(var2) 
    from table1 
    where area_code in ('929', '718', '347', '646') 
0

Was ist eine AREA_CODE_GROUP Tabelle erstellen

AREA_GROUP,AREA_CODE 
'NEW_YORK_AREA','929' 
'NEW_YORK_AREA','718' 
'NEW_YORK_AREA','347' 
'NEW_YORK_AREA','646' 

, die Sie beitreten können:

SELECT t.* FROM TABLE1 "t" 
INNER JOIN AREA_CODE_GROUP "g" 
ON t.AREA_CODE = g.AREA_CODE 
WHERE AREA_GROUP = 'NEW_YORK_AREA' 
Verwandte Themen