2 Stimmen

Wie man den Wert aus 2 Tabellen mit Bedingung anzeigt

SQL Server 2000 verwenden

Tabelle1

ID date value

001 23/01/2012 100
002 25/02/2012 200
....

Tabelle2

Id date value

001 01/01/2012 200
001 02/01/2012 100
...
001 23/02/2012 200
...
001 31/03/2012 100
002 ....
.....

Ich möchte den Wert aus Tabelle 2 auswählen, wenn ID und Datum mit Tabelle 1 übereinstimmen, dann wird der Wert aus Tabelle 1 angezeigt.

Id Datum Wert

001 01/01/2012 200
001 02/01/2012 100
...
001 23/02/2012 100 'matching id and date from table1
...
001 31/03/2012 100
002 ....
.....

Wie man das macht.

Brauche Hilfe bei Abfragen

Erwartetes Ergebnis

1voto

Daniel Renshaw Punkte 32893

Unter der Annahme, dass es nie mehr als eine Zeile in Tabelle1 mit der gleichen ID und dem gleichen Datum wie eine Zeile in Tabelle2 gibt (z. B. wenn ID/Datum ein eindeutiger/primärer Schlüssel von Tabelle1 ist), wird Folgendes funktionieren:

SELECT
    table2.id,
    table2.date,
    ISNULL(table1.value, table2.value) AS value
FROM table2
    LEFT OUTER JOIN table1 ON table2.id = table1.id
        AND table2.date = table1.date

Wenn mehr als eine Zeile aus Tabelle1 mit einer Zeile in Tabelle2 übereinstimmen kann, müssen Sie aggregieren und entscheiden, welche der unterschiedlichen Werte verwendet werden sollen, oder ob Sie einen Durchschnitt, ein Minimum oder ein Maximum nehmen wollen.

1voto

Darshana Punkte 2442
SELECT DISTINCT Table2.ID, Table2.date,
            CASE
                WHEN Table1.ID = Table2.ID
                     AND Table1.date = Table2.date THEN Table1.value
                ELSE Table2.value
            END
FROM Table1, Table2

EDIT

SELECT n_t.n_ID,
       n_t.n_date,
       n_t.n_value
FROM
  (SELECT Table2.ID AS n_ID,
          Table2.date AS n_date,
          CASE
              WHEN Table1.ID = Table2.ID THEN CASE
                                                  WHEN Table1.date = Table2.date THEN Table1.value
                                                  ELSE Table2.value
                                              END
          END AS n_value
   FROM Table1,
        Table2) AS n_t
WHERE n_t.n_value IS NOT NULL

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X