[英]Using a case expression in a where clause
雖然我知道這不是很有效,但我需要讓它快速工作,所以我嘗試遵循最簡單的路徑,或者至少我是這么認為的。 我試圖從實體中獲取最大數據並僅考慮USER不為空的行,並且如果沒有行將USER設置為null,那么我將考慮空值。
該實體的結構如下:
所以,查詢是以下一個:
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視圖中的一個。 我能做些什么來完成我的要求?
我對你正在做的事感到有點困惑。 關閉你的文字描述雖然會有以下幫助嗎?
;WITH t AS
( SELECT Id ,
ParentId,
Guid ,
EventOn ,
USER ,
RANK() OVER (PARTITION BY ParentId ORDER BY
CASE
WHEN USER IS NULL
THEN 0
ELSE 1
END DESC, EventOn DESC) Rnk
)
SELECT *
FROM t
WHERE Rnk=1
我想你只需要加入兩個不同的Max子查詢。
left join (
select RST.ParentId RangeSheet,
MAX(RST.EventOn) EventOn
from RangeSheetTime RST
where Not RST.[User] is NULL
group by RST.ParentId) max1
如果所有ParentID行在“用戶”列中都為空,則此子查詢不會返回一行。
和
left join (
select RST.ParentId RangeSheet,
MAX(RST.EventOn) EventOn
from RangeSheetTime RST
group by RST.ParentId) max2
現在只需選擇您想要的值。
coalesce(max1.EventOn, max2.EventOn) as EventOn
這是我重新編寫您的查詢:
SELECT rs.[$Id] RangeSheet,
grst.eventon,
rsis.id AS [Status],
rsis.name AS StatusRefex
FROM RANGESHEET rs
LEFT JOIN (SELECT rst.ParentId,
rst.EventOn,
RANK() OVER (PARTITION BY rst.parentid
ORDER BY CASE
WHEN rst.user IS NULL THEN 0
ELSE 1
END DESC, rst.eventon DESC) Rnk
FROM RANGESHEETTIME rst) grst ON grst.parentid = rs.[$Id]
AND grst.rnk = 1
LEFT JOIN (SELECT rst.eventon,
rst.parentid,
CASE rst.startorend
WHEN 0 THEN 4
WHEN 1 THEN 1
ELSE NULL
END AS item_state_id
FROM RANGESHEETTIME rst
WHERE rst.startorend IN (0, 1)) x ON x.eventon = GRST.EventOn
AND x.parentid = GRST.RangeSheet
LEFT JOIN RANGESHEETITEMSTATE rsis ON rsis.id = x.item_state_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.