Bien que je sache que ce n'est pas très efficace, j'ai besoin de travailler rapidement, alors j'essaie de suivre le chemin le plus facile, ou du moins je le pensais. J'essaie d'extraire les données max d'une entité et de ne prendre en compte que les lignes où USER n'est pas null, et dans le cas où aucune ligne n'a USER non définie sur null, alors je vais prendre en compte les null.Utilisation d'une expression de cas dans une clause where
la structure de l'entité est la suivante:
- Id int,
- ParentId int,
- guid varchar,
- EventOn DateTime,
- utilisateur int (null)
Donc, la requête est la suivante:
select RS.[$Id] RangeSheet,
GRST.EventOn,
RSIS.Id [Status],
RSIS.Name StatusRefex
from RangeSheet RS
left outer join (select RST.ParentId RangeSheet,
MAX(RST.EventOn) EventOn
from RangeSheetTime RST
where RST.[User] is (case RST.[User] when null then null else not null)
group by RST.ParentId) GRST on RS.[$Id]=GRST.RangeSheet
left outer join RangeSheetTime RST on GRST.EventOn=RST.EventOn
and GRST.RangeSheet=RST.ParentId
left outer join RangeSheetItemState RSIS on (case when RST.StartOrEnd = 1 then 1 when RST.StartOrEnd = 0 then 4 else null end) = RSIS.Id
where RS.[$IsDeleted]=0
Le cas que je rencontre des problèmes est celui de la vue GRST. Que pouvais-je faire pour accomplir mes exigences?
Quelle est la 'WHERE' clause destinée à atteindre? 'où RST. [Utilisateur] est (cas RST. [Utilisateur] quand null alors null else non null fin)' Même si c'était une syntaxe valide il semble redondant. –
De l'entité que j'ai spécifiée ci-dessus, je veux seulement utiliser Max (RST.EventOn) sur les lignes où le champ USER n'est pas nul. Mais dans le cas où toutes les lignes ont ce champ comme nul, alors je ferai Max sur chacun d'eux. C'est ce que j'essayais de faire, certainement à tort. – Hallaghan