虽然我知道这不是非常高效,但我需要快速完成这个工作,所以我尽量遵循最简单的路径,或者至少我是这么想的。我试图从实体中获取最大数据,并仅考虑USER不为空的行,并且如果没有行将USER设置为null,那么我会考虑空值。在where子句中使用case表达式
实体的结构如下:
- ID INT,
- 的ParentId整型,
- 的Guid VARCHAR,
- EventOn日期时间,
- 用户INT(空)
所以,查询是以下一个:
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
我遇到问题的情况是视图GRST内的情况。 我能做些什么来完成我的要求?
什么是'WHERE'条款旨在实现? '其中RST。[用户]是(case RST。[用户]当空,否则不空结束)'即使它是有效的语法,它似乎是多余的。 – 2010-09-01 15:26:35
从我上面指定的实体中,我只想在字段USER不为null的行上使用Max(RST.EventOn)。但是,如果所有行都将该字段设置为空,那么我将在所有行上都执行Max。这正是我想要做的,当然不正确。 – Hallaghan 2010-09-01 15:28:54