2017-01-25 4 views
0

Ich habe an einer Abfrage gearbeitet, wobei ich in einer Unterabfrage die Spalte Cust_Status unter bestimmten Bedingungen auswähle.Unterabfrage hat mehr als 1 Zeilen in der Fallanweisung zurückgegeben

select distinct 
    C.Cust_Code [Cust #], 
    C.Cust_Start_Date [Start Date], 
    C.Cust_End_date [End Date], 
    (select 
     Cust_Status = (case 
          when cast(CUST_UPDATE_DATE_LT as DATE) = cast('2017-01-23 00:00:00' as Date) 
           then 'V' 
          when cast(CUST_UPDATE_DATE_LT as DATE) = cast('2017-01-22 00:00:00' as Date) 
           then 'I' 
         end) 
    from tblCustomers) [Cust Status], 
    M.Machine_ID, 
    M.Machine_Location 
from 
    tblCustomers C 
inner join 
    tblMachine M on C.Cust_Mach_Pkey = M.Pkey 

Wenn ich diese Abfrage ausführen bekomme ich einen Fehler

Unterabfrage mehr als 1 Wert Fehler zurückgegeben.

Wenn ich die Unterabfrage innerhalb der Hülle entfernen, ist es in Ordnung. Aber ich bin sicher, dass es nur einen Datensatz für beide Datumsbedingungen gibt. Also nicht sicher, wie meine Unterabfrage mehr als 1 Werte zurückgibt. Bitte erleuchte mich.

+1

(1) Tag Ihre Frage mit der Datenbank, die Sie verwenden. (2) Geben Sie Beispieldaten und gewünschte Ergebnisse an. (3) Erklären Sie die Logik, die Sie implementieren möchten. –

+0

@Gordon: Es macht wenig Sinn, eine 3-Punkte-Frage zu stellen, in der um zusätzliche Details gebeten wird, und dann eine Antwort zu veröffentlichen, die den Bedarf oder Anreiz, sie zu liefern, negiert. –

+0

Welches DBMS benutzen Sie? Der angezeigte Code ist ungültig (Standard) SQL. –

Antwort

0

Ich vermute, dass Sie nur das neueste Datum vergleichen möchten. Wenn ja, gibt es viel einfachere Möglichkeiten:

select C.Cust_Code as [Cust #], C.Cust_Start_Date as [Start Date], 
     C.Cust_End_date as [End Date], 
     (case when max(cast(CUST_UPDATE_DATE_LT as DATE)) = '2017-01-23' 
      then 'V' 
      when max(cast(CUST_UPDATE_DATE_LT as DATE)) = '2017-01-22' 
      then 'I' 
     end) as Cust_status 
     M.Machine_ID, 
     M.Machine_Location 
from tblCustomers C inner join 
    tblMachine M 
    on C.Cust_Mach_Pkey = M.Pkey 
group by C.Cust_Code, C.Cust_Start_Date, C.Cust_End_date, 
     M.Machine_ID, M.Machine_Location 
+0

Danke für deine Antwort. Aber ich suche nach einer Antwort für, wenn meine Unterabfrage in selet-Anweisung mehr als 1 Reihe zurückgibt, was die Lösung sein kann? Wählen Sie beispielsweise C.Cust_Code als [Cust #], C.Cust_Start_Date als [Start Date], C.Cust_End_date als [End Date], (Groß-/Kleinschreibung (cast (CUST_UPDATE_DATE_LT als DATE))) = '2017-01- 23 ' dann' V ' wenn max (Besetzung (CUST_UPDATE_DATE_LT als DATE)) =' 2017-01-22 ' dann' I ' Ende) als Cust_status von tblCustomers. Wie kann vermieden werden, dass diese Unterabfrage mehr als 1 Wert Fehler zurückgegeben hat. In SELECT-Anweisung kann ich IN nicht verwenden – LT268

Verwandte Themen