2016-05-02 14 views
0

Ich habe 2 Tabellen. Einer ist eine Liste von Vierteln und der andere ist eine Liste von Jahren. Ich muss eine Abfrage schreiben, um die Jahre zurückzugeben, und das Wort "teilweise" am Ende der Jahre anhängen, die weniger als 4 Viertel enthalten.SQL Concat-Funktion nur, wenn die Anzahl der Zeilen kleiner als die Anzahl

Ein Beispiel für ein paar Zeilen aus dem Jahr Tabelle:

YearName | YearUUID 
2015  | 15C33 
2016  | 16C33 

Ein Beispiel für die Tabelle Viertel:

QuarterNumber | StartDate | YearUUID 
1    | 2015-01-01 | 15C33 
2    | 2015-03-01 | 15C33 
3    | 2015-06-01 | 15C33 
4    | 2015-09-01 | 15C33 
1    | 2016-01-01 | 16C33 
2    | 2016-03-01 | 16C33 

Siehe in dem obigen Beispiel, dass 2016 ein Teil Jahr sein wird, . So sollen meine Abfrage-Ergebnisse wie folgt:

YearsList 
2015    
2016 - Partial 

ich vor der Concat Funktion verwendet habe, aber nie mit einer Bedingung wie diese. Ohne zu wissen, wie es zu konditionieren, habe ich die folgenden:

SELECT DISTINCT CONCAT(Years.YearName, ' - Partial') as YearsList 
FROM dbo.Quarters Quarters, 
    dbo.Years Years 
WHERE Quarters.YearUuid = Years.YearUuid 
     AND Quarters.ActiveStatus = 'ACTIVE' 
     AND Quarters.BroadcastQuarterType = 'STANDARD' 
ORDER BY YearsList ASC; 

Das gibt mir eine Liste von all den Jahren, aber anfügt ‚Partial‘ auf jeden einzelnen von ihnen. Da ist offensichtlich keine Bedingung drin. Wie integriere ich eine Bedingung in diese Abfrage, so dass ich volle Jahre (Jahre, die 4 Quartale enthalten) ohne "Partial" am Ende angehängt habe, während ich auch die DISTINCT beibehalten und die ORDER BY beibehalten habe.

Antwort

3

Sie GROUP BY verwenden könnten und ein CASE WHEN Konstrukt:

SELECT CASE WHEN COUNT(Quarters.QuarterNumber) < 4 
      THEN CONCAT(Years.YearName, ' - Partial') 
      ELSE CAST(Years.YearName AS varchar) 
     END as YearsList 
FROM dbo.Quarters Quarters, 
    dbo.Years Years 
WHERE Quarters.YearUuid = Years.YearUuid 
     AND Quarters.ActiveStatus = 'ACTIVE' 
     AND Quarters.BroadcastQuarterType = 'STANDARD' 
GROUP BY Years.YearName 
ORDER BY Years.YearName ASC; 
+0

ich die folgende Fehlermeldung: Msg 245, Ebene 16, Status 1, Zeile 1 Fehler bei der Konvertierung, wenn die varchar-Wert-Umwandlungs '2011 - Teil' zu Datentyp int. –

+0

Warten Sie, das klingt wie eine SQL Server-Fehlermeldung. Ihre Frage ist mit Oracle getaggt. Bist du nicht auf Oracle? – trincot

+0

Entschuldigung, ja, ich verwende SQL Server Management Studio. Ich füge das zu den Tags hinzu –

Verwandte Themen