ich SQL Server bin mit 2014 Ich habe folgende Tabelle mit dem Namen: DATE_PARAM
:Return Reihen mit userId null oder ohne Gruppe basiert von
ID FROM_VALUE TO_VALUE PARAM_NAME USER_ID
------------------------------------------------------------------------
1 2016-01-01 2017-01-01 00:00:00.000 date NULL
2 2016-02-01 2017-01-01 00:00:00.000 date -1
3 2016-02-01 2018-02-01 00:00:00.000 anotherDate NULL
4 2016-04-01 2018-02-01 00:00:00.000 anotherDate 3
Diese Tabelle listet alle verfügbaren Parameter. PARAM_NAME
ist der Name des Parameters und ist für jeden Parameter eindeutig. USER_ID == NULL
bedeutet, dass dies ein vom Administrator definiertes Attribut ist. USER_ID
== Eine beliebige Zahl bedeutet, dass dieser Parameter dem Benutzer gehört.
Was möchte ich zum Beispiel für Parameter erreichen: userId=-1
- Zuerst gruppiere ich diese Datensätze von PARAM_NAME
. Dann möchte ich in der ersten Priorität das Attribut erhalten, das ihm gehört (USER_ID=-1
), aber wenn es kein Attribut gibt, das ihm gehört (innerhalb desselben PARAM_NAME
), würde ich gerne vom Administrator USER_ID=null
zur Verfügung gestellt bekommen.
Erwartetes Ergebnis:
ID FROM_VALUE TO_VALUE PARAM_NAME USER_ID
-----------------------------------------------------------------------
2 2016-02-01 2017-01-01 00:00:00.000 date -1
3 2016-02-01 2018-02-01 00:00:00.000 anotherDate NULL
Ich bin nicht sicher, ob es durch Abfrage realisiert werden kann und selbst wenn ja, ob es wird in der Leistung gut sein. Ich habe versucht, einen selbst linken Outer Join zu machen, habe aber immer noch kein erwartetes Ergebnis.
EDIT - ANTWORT
select distinct
isnull(users.from_value,admin.from_value) from_,
isnull(users.to_value,admin.to_value) to_,
param_list.param_name PARAM_NAME,
users.user_id USER_ID
from
(Select param_name from DATE_PARAM) param_list
left join
(select * from DATE_PARAM where user_Id = -1) users on users.param_name = param_list.param_name
left join
(select * from DATE_PARAM where user_id is null) admin on admin.param_name = param_list.param_name;
Try this: SELECT * FROM Tabellenname WHERE BENUTZER_ID = -1 UNION ALL SELECT * FROM Tabellenname WHERE USER_ID IST NULL –
Zunächst ist die Tabelle keine Liste von Parametern, es gibt mehrere Zeilen in der Tabelle sowohl für Parameter "Datum" als auch für Parameter "AnderesDatum". Es sieht so aus, als ob es sich um eine Tabelle von Zeiträumen (Datumsbereichen) handeln könnte, wenn ein Parameter mit einem bestimmten Benutzer verknüpft (verknüpft mit?) Wäre. Definieren Sie das Schema besser oder deutlicher bitte. –
Fügen Sie dem @MaciejLos-Kommentar eine Klausel 'GROUP BY [PARAM_NAME]' hinzu, und Sie sollten in Ordnung sein. –