我试图在一个JOIN ON子句中构建一个case/if语句.
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT([Statuses].[STRID], 3) = [CTE].[F61]
Run Code Online (Sandbox Code Playgroud)
问题是该列[Statuses].[STRID]包含文本和数字.我将它与之比较的列[CTE].[F61]是一个整数.
有没有办法检测列[Statuses].[STRID]是否有字符或数字,如果是字符,那么将其设置为0?
这是一个伪查询来帮助:
LEFT JOIN [CTSTRC] [Statuses] ON RIGHT((CASE [Statuses].[STRID] WHEN TEXT THEN 0 ELSE CAST([Statuses].[STRID] AS INT) END), 3) = [CTE].[F61]
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
谢谢!
我想WHERE根据输入参数的值更改查询的子句.我猜这是可能的,但似乎我以错误的方式接近它?
我的SP查询的简化版本:
CREATE PROCEDURE [dbo].[GetMailboxMessagesByStatus]
@UserId UNIQUEIDENTIFIER,
@MessageStatus INT
AS
BEGIN
SELECT *
FROM MailboxMessages m
WHERE
CASE @MessageStatus
WHEN 4 THEN m.SenderId = @UserId --Sent
ELSE m.RecipientId = @UserId --Inbox
END
END
GO
Run Code Online (Sandbox Code Playgroud) 我已经四处寻找,但没有找到与我想要实现的相似的情况.我只想在条件为真时执行where子句表达式,否则我想忽略与它不匹配的数据.
Where (
case when LeaveDateTime > FromDate and EnteringDateTime < ToDate then
(dateadd(d, Threshhold, LeaveDateTime) >= EnteringDateTime
end
);
Run Code Online (Sandbox Code Playgroud)
我在'> =附近得到错误的语法有人可以帮我解决这个问题吗?
我试图做这个查询,我有一个where子句.问题是我需要在where条件下使用运算符IN但我无法弄清楚我错过了什么.
有人可以帮忙吗?
这是我的查询
DECLARE @OP INT = 1
SELECT * FROM Table
WHERE
Table.[status] IN (CASE WHEN @OP = 1 THEN (5,6) ELSE (12) END)
Run Code Online (Sandbox Code Playgroud) 我有一个带有X和Y坐标列的对象列表。
当变量值大于5804400时,我只想选择Y坐标值大于5804400的对象。
这是我的尝试,但是SQL不喜欢它。
Select * from Panels p
where case when @Val > 5804400 then p.Y > 5804400 else p.Y < 5804400 end
Run Code Online (Sandbox Code Playgroud) 我正在为变量@TextSearchWord搜索单词匹配
我有一个@SearchCriteria变量,可能有5个值!
根据这个价值,我选择从哪个领域搜索我的单词!
- 所以我只需要在"WHERE"语句中级联"CASE"语句,并像select语句中的其他示例一样!
SELECT COUNT(WordID) AS WordQty
FROM itinfo_QuranArabicWordsAll
WHERE (SiteID = @SiteID)
AND (QuranID = @QuranID)
AND (SuraID BETWEEN @StrtSuraID AND @EndSuraID)
AND (VerseOrder BETWEEN @StrtVerseSortOrder AND @EndVerseSortOrder)
AND (
-- here is my problem :
CASE
WHEN (@SearchCriteria = 'DictNM') THEN (WordDictNM = @TextSearchWord )
ELSE CASE
WHEN (@SearchCriteria = 'DictNMAlif') THEN (WordDictNMAlif = @TextSearchWord)
...
END
END
)
Run Code Online (Sandbox Code Playgroud) 如果用户输入800 @WorkShop,则应返回所有具有800个车间ID和900个车间ID的记录.
如果用户传递任何其他ID,@WorkShop它应该只返回选择@WorkShopId的记录.
我试过以下:
SELECT *
FROM Test
WHERE Workshop IN (
CASE
WHEN @WorkShop = N'800' THEN N'900' AND N'800'
ELSE @WorkShop
END
)
Run Code Online (Sandbox Code Playgroud)
这会返回一个错误:
Incorrect syntax near the keyword 'and'.
Run Code Online (Sandbox Code Playgroud)
所以总之如果用户传递800作为@WorkShop参数它应该返回如下内容:
Workshop IN ('800', '900')
Run Code Online (Sandbox Code Playgroud) 我试着四处寻找但找不到任何可以帮助我的东西.
我正在尝试在SQL中执行此操作:
DECLARE @onlyMM INT
SET @onlyMM = 1
SELECT *
FROM cdn.magnag
WHERE CASE @onlyMM
WHEN 1
THEN man_zrdtyp NOT IN (
1616
,2001
)
ELSE - 1
END
Run Code Online (Sandbox Code Playgroud)
我有一个问题:
where case @onlyMM when 1 then man_zrdtyp not in (1616,2001) else -1 end
Run Code Online (Sandbox Code Playgroud)
如何case为操作员正确制作not in?
我试图在where子句中放置一个if条件,我无法找出我想要的正确语法.
逻辑应该是如果某个时间段等于特定的数字然后检查以确保pdftype不为null否则不要检查所有.
这是我到目前为止所拥有的:
where
g.ReportInstanceID = blah
and rcr.FormID = blah
and rcr.FormSectionID = blah
and rcr.SubSectionID = blah
and CASE rcr.DataCollectionPeriodID
WHEN 163 THEN (PDFType IS NOT NULL)
END
Run Code Online (Sandbox Code Playgroud)