Ich muss Daten nehmen, die in einer aktuellen Ansicht vorhanden sind (es wurde abgeflacht) und eine bedingte Logik auf eine Zeile anwenden. Reihenbasis, um seine Darstellung zu ändern. Idealerweise könnten diese Daten von Benutzern in einer Ansicht bewertet werden, auf die von SSMS 2012 zugegriffen wird (fragliche Datenbank ist Microsoft SQL Server 2012). Ich bin kein T-SQL-Guru oder kenne mich mit vielen der neuen Funktionen aus, die SQL Server zu diesem Zweck anbietet. Meine ersten Gedanken waren, einen Cursor und einige Funktionen zu verwenden (ich bin eher ein C# -Entwickler), war mir aber nicht sicher, wie man über eine Ansicht darauf zugreifen könnte (Hauptanforderung). Ich würde es lieber vermeiden, neue Tabellen in der Datenbank zu erstellen (wenn überhaupt möglich).Verwenden Sie T-SQL mit bedingter Logik, um Spaltenwerte für die Verwendung in einer SQL Server-Ansicht zu überschreiben
Unten finden Sie ein Beispiel der aktuellen Daten (As-Is) und wie die Benutzer es anzeigen möchten (To-Be). Die Regeln, die beeinflussen, wie die Daten abgeleitet werden, sind unten aufgeführt.
As-Is (actual source of data):
PK MainValue Signal1 Signal2 Signal3 Signal4 Signal5
1 12345 XYZ 12345 NULL NULL NULL
2 90210 ABC 99999 90210 NULL NULL
3 970622 XYZ 88888 34652 970622 NULL
To-Be (how the users would like the data displayed):
PK MainValue Signal1 Signal2 Signal3 Signal4 Signal5
1 12345 XYZ XYZ XYZ XYZ XYZ
2 90210 ABC 99999 99999 99999 99999
3 970622 XYZ 88888 34652 34652 34652
Regeln.
- prüfen
[MainValue]
Feld und versuchen, eine Übereinstimmung mit dem ersten[Signal#]
Feld zu finden, die wir (immer bei[Signal1]
für jede Daten von Startreihe finden - Einmal Wir erhalten eine Übereinstimmung, indem wir das vorherige Signalfeld betrachten (zB wenn wir eine Übereinstimmung zwischen
[MainValue]
und[Signal3]
haben, würden wir[Signal2]
als unsere tatsächliche Datenquelle verwenden). - Nehmen Sie diese Datenquelle und ersetzen Sie nun alle Felder beginnend bei der Stelle, an der die Übereinstimmung gefunden wurde, bis zum letzten Signal [Signal5] -Feld.
Tun Sie dies für jede Zeile. Es sollte nur ein Signalfeld geben, das übereinstimmt und wir werden aufhören zu versuchen, ein Match zu machen, nachdem wir einen Treffer bekommen haben.
Sie haben vergessen, die SQL Sie bisher versucht haben, zu schreiben, damit wir Ihnen dabei helfen können. – sstan
Sie brauchen 'UNPIVOT' Ihren Tisch, machen Sie die Berechnung, dann' PIVOT' wieder –
ich denke, jede Spalte ist 'varchar'? ansonsten kann man 'MainValue' nicht mit' Signal1' vergleichen –