2016-04-02 8 views
0

habe ich eine Tabelle, tblNewParts mit 3 Spalten:SQL Server: Wählen Sie ... Von mit FULL JOIN mit einem Standardwert für eine Spalte

NewCustPart 
AddedDate 
Handled 

und ich versuche zu FULL JOIN es zu einer vorhandenen Tabelle, tblPartsWorkedOn. tblNewParts wird definiert 'N' notleidenden behandelt werden ...

SELECT * 
FROM dbo.tblPartsWorkedOn AS BASE 
FULL JOIN dbo.tblNewParts AS ADDON ON BASE.[CustPN] = ADDON.[NewCustPart] 
WHERE ADDON.[Handled] IS NULL 
ORDER BY [CustPN] DESC 

Und ich möchte das Feld [Handled] zurück als 'N' statt NULL kommen, wenn ich die Abfrage ausführen. Das Problem ist, dass, wenn keine Datensätze in der neuen Tabelle sind, ich NULL 's statt 'N' s bekomme.

Ich sah eine SELECT CASE WHEN col1 IS NULL THEN defaultval ELSE col1 END als eine meist geeignete Antwort von here. Ich frage mich, ob das in diesem Fall funktioniert, und wie würde ich das in T-SQL für SQL Server 2012 schreiben? Ich brauche alle Spalten von beiden Tabellen, anstatt nur die eine.

Ich mache dies eine Frage, anstatt einen Kommentar auf den zitierten Link, um nicht die ursprüngliche Link-Frage zu verschleiern.

Vielen Dank für Ihre Hilfe!

+1

Was hält Sie davon ab, diese Lösung zu versuchen? –

+0

@IvanStarostin immer noch ziemlich neu in SQL, und Wände schlagen, weil es nicht eine vollständige Programmiersprache ist, bat ich um Hilfe und ging dann los, um die Dinge auch zu versuchen. Ich habe meine "Antwort" gepostet, wie es jetzt für mich funktioniert, und ich hoffe, dass es für andere, die denken, dass ich es tue, und nicht für den typischen SQL-Programmierer bleibt. : D – Michieal

+1

Fühlen Sie sich frei, einige weitere Antworten mit Demonstration der 'ISNULL' und' COALESCE' Funktionen zu veröffentlichen. –

Antwort

0

Nach vielen Iterationen fand ich die Antwort, es ist etwas sperrig, aber hier ist es sowieso. Synopsis:

Ja, die CASE Anweisung funktioniert, aber es gibt die Ausgabe als unbenannte Spalte. Um in diesem Fall alle ursprünglichen Spalten UND die korrigierte Spalte zu erhalten, musste ich SELECT *, CASE...END as [ColumnName] verwenden.

Aber hier ist die bessere Lösung, da es die Informationen in die richtige Spalte platziert, anstatt eine Spalte am Ende der Tabelle hinzuzufügen und diese Spalte 'Unnamed Column' aufrufen.

Select [ID], [Seq], [Shipped], [InternalPN], [CustPN], [Line], [Status], 
     CASE WHEN ADDON.[NewCustPart] IS NULL THEN BASE.[CustPN] ELSE 
      ADDON.[NewCustomerPart] END as [NewCustPart], 
     GetDate() as [AddedDate], 
     CASE WHEN ADDON.[Handled] IS NULL THEN 'N' ELSE ADDON.[Handled] END as [Handled] 

     from dbo.tblPartsWorkedOn as BASE 
     full join dbo.tblNewParts as AddOn ON Base.[CustPN] = AddOn.NewCustPart 

     where AddOn.Handled = 'N' or AddOn.Handled is null 
     order by [NewCustPart] desc 

Dieser SQL-Code stellt die [CustPN] in [NewCustPart] wenn es null ist, ist es ein 'N' in das Feld setzt [Handled] wenn es null ist, und es weist das Datum auf das [AddedDate] Feld. Es gibt auch nur Datensätze zurück, die nicht bearbeitet wurden, sodass Sie diejenigen erhalten, die betrachtet werden müssen. und er ordnet die resultierende Ausgabe durch den Feldwert [NewCustPart] an.

resultierende Ausgabe sieht etwa wie folgt aus: (I die Datetime für die Ausgabe hier verkürzt.)

[ID] [SEQ] [Shipped] [InternalPN] [CustPN] [Status] [NewCustPart] [AddedDate] [Handled] 
1  12  N   10012A   10012A  UP   10012A   04/02/2016 N 
... 

Anstatt mit den nulls:

[ID] [SEQ] [Shipped] [InternalPN] [CustPN] [Status] [NewCustPart] [AddedDate] [Handled] 
1  12  N   10012A   10012A  UP   NULL   NULL   NULL 
... 

Ich verlasse diese auf und beantworte es einfach, anstatt es zu löschen, weil ich mir ziemlich sicher bin, dass jemand anders diese Frage stellen wird. Ich denke, dass viele Beispiele, die zeigen, wie und warum etwas getan wird, sehr hilfreich sind, da nicht alles verallgemeinert werden kann. Nur ein paar Gedanken und ich hoffe, dass dies jemand anderem hilft!

1

Benennen Sie die Spalte (alias.column_name) in SELECT-Anweisung und verwenden Sie ISNULL (alias.column, 'N').

Danke

+0

Kannst du das weiter erklären, mit einem Beispiel? Ich würde gerne wissen, wie ich das in meine Arbeit einbauen kann, da ich in absehbarer Zeit viel T-SQL verwenden werde! Vielen Dank!!! – Michieal

Verwandte Themen