Ich habe eine Liste von Monaten, die in meine DB gefüllt werden. Diese Monate werden dann in eine Dropdown-Liste für eine Webanwendung eingetragen. Der Client möchte, dass der aktuelle Monat die Standardoption in der Dropdown-Liste ist. Die Daten des aktuellen Monats sind jedoch nicht immer verfügbar (oder ActiveFlag = Y in der Datenbank). In diesem Fall möchte der Client stattdessen den Standardwert für den ersten Monat des Jahres angeben.SELECT oben 1 absteigend, wenn DB aktuelle Daten enthält, sonst wählen Sie oben 1 aufsteigend
Also teste ich, dass die Dropdown-Liste und die DB-Tabelle mit Selenium-Automatisierung mit C# übereinstimmen. Ich habe eine SQL-Abfrage, die die Top 1 in absteigender Reihenfolge sortiert zurückgibt (Dies funktioniert die letzten aktiven Monat im Jahr zurückzukehren, da BroadcastMonthofYearNbr ganzen Zahlen 1 bis 12 Monate Zahlen enthält):
SELECT top 1 CONCAT(RTRIM(left(M.Name, CHARINDEX(',',M.Name)-1)), ' (', STUFF(REPLACE('/'+CONVERT(VARCHAR(10), M.StartDate, 101), '/0', '/'), 1, 1, ''), '-', STUFF(REPLACE('/'+CONVERT(VARCHAR(10), M.EndDate, 101), '/0', '/'), 1, 1, ''), ')')
FROM [AudienceProjections].[dbo].[BroadcastCalendarQuarterMonthMap] QMP,
AudienceProjections.dbo.BroadcastCalendarYear Y,
AudienceProjections.dbo.BroadcastCalendarMonth M,
AudienceProjections.dbo.BroadcastCalendarQuarter Q
WHERE y.BroadcastCalendarYearUuid = q.BroadcastCalendarYearUuid
AND q.BroadcastCalendarQuarterUuid = qmp.BroadcastCalendarQuarterUuid
AND qmp.BroadcastCalendarMonthUuid = m.BroadcastCalendarMonthUuid
AND M.ActiveStatus = 'ACTIVE'
AND y.ActiveStatus = 'ACTIVE'
AND q.BroadcastQuarterType = 'STANDARD'
AND y.BroadcastCalendarYear = YEAR(GETDATE())
ORDER BY qmp.BroadcastMonthofYearNbr DESC
Die obige Abfrage gibt diese :
No Column Name April (3/28/2016-4/24/2016)
Der aktuelle Monat für, wenn ich diese Frage bin Entsendung ist 5. Mai. Beachten Sie, dass das obige Abfrageergebnis April und nicht Mai zurückgibt. Dies liegt daran, dass May-Daten noch nicht in die DB importiert wurden (siehe Tabelle unten, um zu unterscheiden, ob die Daten vorhanden sind oder nicht. Ie Aktiv versus Inaktiv). Also wird meine Anfrage in diesem Fall nicht funktionieren. Ich muß jetzt ein CASE THEN ELSE
oder eine IF EXISTS
Art der Funktion, im Januar zurück, wenn diese Situation
Hier tritt die Monatstabelle, die Sie Mai als inaktives haben sehen können:
Name StartDate EndDate ActiveStatus
January, 2016 2015-12-28 2016-01-31 ACTIVE
February, 2016 2016-02-01 2016-02-28 ACTIVE
March, 2016 2016-02-29 2016-03-27 ACTIVE
April, 2016 2016-03-28 2016-04-24 ACTIVE
May, 2016 2016-04-25 2016-05-29 INACTIVE
HINWEIS: Ich habe vergessen über die Situation des aktuellen Datums, der Januar ist, und wenn Januar nicht da ist, dann würde das Jahr auch noch dort nicht sein. Die Bedingung in der Abfrage müsste also Year berücksichtigen. Die Jahrestabelle (BroadcastCalendarYear) verfügt auch über eine ActiveStatus-Spalte, die verwendet werden kann.
Also wenn das Jahr auch inaktiv ist, dann gib mir eine Zeichenfolge zurück, die sagt "Keine Daten in DB für Year".
Was ist die Frage? Wie schreibe ich einen CASE-Ausdruck? –
Wie schreibe ich einen Ausdruck innerhalb dieser Abfrage oben, um die Ergebnisse zu erhalten, die ich brauche. Was ich brauche, ist der aktuelle Monat, wenn es AKTIV ist, andernfalls den ersten Monat des Jahres. Beachten Sie, dass ich am Ende eine Tabelle hinzugefügt habe, um die Zellen "Aktiv" und "Inaktiv" in der Tabelle "Monat" anzuzeigen. –
Und was hat das mit C# oder Visual Studio zu tun (was Sie getaggt haben)? – Transcendent