Как использовать между оператором с оператором case в SQL Server 2005 - PullRequest
2 голосов
/ 07 декабря 2010

Как использовать оператор BETWEEN с оператором CASE

@FromEmpAge
@ToempAge

select * from Emp
where EmpAge between
  case when ToempAge0 then @FromEmpAge and @ToempAge end

Как это сделать?

Ответы [ 5 ]

1 голос
/ 07 декабря 2010

Не уверен, что это сработает, но если это сработало, вы должны убедиться, что сначала правильно завершили CASE утверждение!

SELECT 
    (list of columns) 
FROM 
    dbo.Emp
WHERE
    EmpAge BETWEEN 
      CASE (some column)                     | this is the first value 
          WHEN ToEmpAge0 THEN @FromEmpAge    | for the BETWEEN ....
      END                                    | close the CASE
      AND @ToempAge                          | this is the second value

У CASE должен быть хотя бы один WHEN....THEN...., а затем END для "закрытия", затем CASE - только после этого вы можете продолжать идти .....

Но опять же: не уверен, что это сработает, даже с "правильным" синтаксисом .....

0 голосов
/ 19 сентября 2015

Напишите запрос, в котором имя сотрудника будет отображаться с заглавной первой буквой, а все остальные буквы строчными и № отдела Для всех сотрудников, чей второй символ их имени находится между «A» и «M», дайте каждому столбцу соответствующую метку. Я попробовал что-то, что не сработало. Мой рабочий код:

SELECT INITCAP(ename), deptno 
FROM  emp
WHERE ename LIKE BETWEEN ('_A%' AND '_M%');
0 голосов
/ 18 декабря 2012
    DECLARE @StartRow INT
    SET @StartRow = ( cast(@PageIndex as int) * cast(@NumberOfRows as int) ) + 1 ;


    WITH    CTE
              AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY CASE
                                                          WHEN @SortColumnName = 'ID'
                                                          AND @SortOrderBy = 'asc'
                                                          THEN sod.ID
                                                          END ASC, CASE
                                                          WHEN @SortColumnName = 'ID'
                                                          AND @SortOrderBy = 'desc'
                                                          THEN sod.ID
                                                          END DESC, CASE
                                                          WHEN @SortColumnName = 'MessageText'
                                                          AND @SortOrderBy = 'asc'
                                                          THEN MessageText
                                                          END ASC, CASE
                                                          WHEN @SortColumnName = 'MessageText'
                                                          AND @SortOrderBy = 'desc'
                                                          THEN MessageText
                                                          END DESC, CASE
                                                          WHEN @SortColumnName = 'TO'
                                                          AND @SortOrderBy = 'desc'
                                                          THEN [TO]
                                                          END DESC
                                                           ) AS RN ,
   [SendedDate]
  ,[UserID]
  ,sod.[ID]
  ,[SmsOutboxID]
  ,[MessageID]
  ,[FolderID]
  ,[From]
  ,[TO]
  ,[MessageText]
  ,[SendedType]
  ,[SendedStatus]
  ,[IsDelete]
  ,[NumberOfMessage]
  ,[MessageType]
  ,[PricesbySMS]
  ,[Sended]


   FROM SMS_Outbox so inner join SMS_OutboxDetails sod on so.ID = sod.SmsOutboxID where so.UserID = @UserID and sod.SendedType = @Type and sod.IsDelete = 0)

        SELECT *
        FROM   CTE
        WHERE   RN BETWEEN case @Excel when 0 then (@StartRow - cast(@NumberOfRows AS int)) else @NumberOfRows end
                   AND case @Excel when 0 then (@StartRow - 1) else @PageIndex end
0 голосов
/ 18 декабря 2012
        SELECT *
        FROM   CTE
        WHERE   RN BETWEEN case @Excel when 0 then (@StartRow - cast(@NumberOfRows AS int)) else @NumberOfRows end
                   AND case @Excel when 0 then (@StartRow - 1) else @PageIndex end
0 голосов
/ 22 января 2011

Я не уверен, что вы имеете в виду под ToEmpAge0.В любом случае, marc_s ответил на ваш вопрос о том, как использовать оператор CASE в операторе BETWEEN, который будет работать, если вы поставите правильное литеральное значение после WHEN.Вы также можете использовать оператор CASE для второго операнда оператора BETWEEN.

Я предполагаю, что ToEmpAge является столбцом INT:

SELECT 
    (list of columns) 
FROM 
    dbo.Emp
WHERE
    EmpAge BETWEEN 
       CASE ToEmpAge 
          WHEN 0 THEN @FromEmpAge
          WHEN 1 THEN @FromEmpAge+10 --or whatever
       END
    AND
       CASE ToEmpAge
          WHEN 0 THEN @ToEmpAge
          WHEN 1 THEN @ToEmpAge+5
       END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...