如何在WHERE条件下级联CASE sql

时间:2015-04-21 15:22:15

标签: sql sql-server tsql

  • 我正在寻找变量的字匹配 - @TextSearchWord

  • 我有一个@SearchCriteria变量,可能有5个值!

  • 根据该值,我选择哪个字段我必须搜索我的字!

- 所以我需要级联" CASE"声明在" WHERE"只有声明,并且像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
    )

2 个答案:

答案 0 :(得分:5)

您不需要CASE声明。

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 (
        (@SearchCriteria = 'DictNM' AND WordDictNM = @TextSearchWord )
        OR (@SearchCriteria = 'DictNMAlif' AND WordDictNMAlif = @TextSearchWord)
        ...
)

答案 1 :(得分:3)

SQL WHERE clauses: Avoid CASE, use Boolean logic

....
AND(
    ( @SearchCriteria = 'DictNM'     AND WordDictNM     = @TextSearchWord )   
 OR ( @SearchCriteria = 'DictNMAlif' AND WordDictNMAlif = @TextSearchWord ) 
)