Frage

Ich brauche eine SQL-Abfrage, die ContactDate, sortname, Stadt, Contact und Zusammenfassung aus den nachstehenden Tabellen zurückgibt. Wenn jeder Wert null ist, muss ich es den Text „No Entry“ zurückzukehren.

ContactTable

  • ContactID
  • ContactDate
  • UserID
  • Zusammenfassung
  • Contact
  • sortname

Usertable

  • UserID
  • Vorname
  • Name
  • AddressID

Adresstabelle

  • AddressID
  • City
  • Straße
  • Staat
  • Zip
War es hilfreich?

Lösung

SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
       COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
       COALESCE(AddressTable.City, 'No Entry') AS City,
       COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID

Hier ist ein Diagramm von SQL Datetime-Formate für die CONVERT-Anweisung oben.

Andere Tipps

COALESCE () auf jeder Plattform, die es wert sein Gewicht in Salz ist.

Stellen Sie sicher, Guss Probleme zu behandeln.

Wie zum Beispiel:

--(SQL Server)
SELECT
  C.ContactID,
  COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
  COALESCE(SorName, 'No Entry') AS SortName

usw., Etc.

SELECT 
  ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table

ISNULL verwenden ist ziemlich einfach.

Die Oracle-Version dieser Funktion wird nvl genannt. Gleiche Verwendung -. SELECT nvl(col_name, desired_value) FROM foo

Die allgemeinere Version davon ist decode, die drei Parameter hat und ermöglicht es Ihnen, welche Spalte Wert, den Sie angeben möchten, für einen Ersatz durchzuführen (so können Sie alle ‚Johnny‘ Ersetzen durch ‚John‘ oder etwas).

Mit ' IIF ist eine Lösung Zugang DB, sondern kann auch in anderen DBs arbeiten.

SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName   

Die Funktion IIF gibt einen von zwei Werten abhängig von der Auswertung eines Ausdrucks.
SQL-Syntax:       IIF (Ausdruck, true-Wert 1, falsch-Wert)

Sie können auch verschiedene Anrufe für jede Spalte machen. Es wird mehr einzelne Anrufe dauern, aber es kann schneller sein, wenn Sie viele Zeilen haben nicht zu aktualisieren.

update ContactTable
set ContactDate = 'No Entry'
where ContactDate is null;

Wiederholen Sie für jede Spalte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top