2016-04-07 5 views
1

SQL Frage:SQL-Summe über Zeilen mit Spaltenübereinstimmung?

Ich habe eine Tabelle mit drei Spalten: From_City, To_City, Trip_Count und 4 Reihen:

+-----------+---------+------------+ 
| From_City | To_City | Trip_Count | 
+-----------+---------+------------+ 
| Berlin | London |   2 | 
| London | Berlin |   3 | 
| Sydney | Tokyo |   4 | 
| Tokyo  | Sydney |   6 | 
+-----------+---------+------------+ 

ich Reisen zwischen den Städten, in eine neue Tabelle summieren möchten, die 2 hat nur Zeilen:

+--------+------------+------------+ 
| City | Other_City | Trip_Count | 
+--------+------------+------------+ 
| Berlin | London  |   5 | 
| Sydney | Tokyo  |   10 | 
+--------+------------+------------+ 

Ich konnte nicht herausfinden, wie man dies in SQL (vorzugsweise SQL Server) erreicht. Irgendwelche Vorschläge? Vielen Dank!

Hinweis: Bestellung zwischen zwei Städten spielt keine Rolle. entweder Berlin-London oder London-Berlin ist in Ordnung.

Antwort

2

Try this:

SELECT CASE 
      WHEN From_City < To_City THEN From_City 
      ELSE To_City 
     END AS City, 
     CASE 
      WHEN From_City >= To_City THEN From_City 
      ELSE To_City 
     END AS Other_City, 
     SUM(Trip_Count) AS Trip_Count 
FROM mytable 
GROUP BY CASE WHEN From_City < To_City THEN From_City ELSE To_City END, 
     CASE WHEN From_City >= To_City THEN From_City ELSE To_City END 
0

UPDATE: Wie FLICKER out hat darauf; Dies funktioniert nicht in SQL Server, da SQL Server weder LEAST und GREATEST noch ähnliche Funktionen wie MIN/MAX in SQLite bereitstellt. Es tut uns leid.


Sie erhalten die erste Stadt der beiden mit LEAST und das andere mit GREATEST:

create table full_trips as 
(
    select 
    least(from_city, to_city) as city, 
    greatest(from_city, to_city) as other_city, 
    sum(trip_count) as trip_count 
    from trips 
    group by least(from_city, to_city), greatest(from_city, to_city) 
); 
+1

Ist das SQL Server-Syntax? Ich kann die Funktionen nicht finden! – FLICKER

+0

Oh, es tut mir leid, du hast Recht. 'LEAST' und' GREATEST' sind in jedem DBMS verfügbar, nicht jedoch in SQL Server. Das wusste ich nicht. (Seltsam. SQL Server gibt es seit etwa zwanzig Jahren. Warum wurden diese Funktionen nie hinzugefügt? Keine große Sache für zwei Werte zu vergleichen, aber mehr als zwei Werte mit 'CASE WHEN 'zu vergleichen, ist stattdessen ein Aufwand.) –

+0

Dies ist immer noch eine gute Lösung. Für SQL Server werde ich einfach tun, was Georgos Betsos vorgeschlagen hat. –