2010-12-07 67 views
2

用就怎麼用BETWEEN運營商與CASE聲明如何運營商之間有case語句在SQL Server 2005中

@FromEmpAge 
@ToempAge 

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

如何做到這一點?

+0

如果您發佈的代碼或XML,** **請在高亮文本編輯器的線和編輯器工具欄上點擊「代碼」按鈕(101 010)很好地格式化和語法突出它! – 2010-12-07 08:54:57

+2

這沒有任何意義。你想達到什麼目的? – 2010-12-07 08:58:13

回答

1

不知道它是否工作 - 但如果它沒有,你就必須首先要確保正確完成您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

我不知道你的意思ToEmpAge0什麼。無論如何,marc_s已經回答了你的關於如何使用BETWEEN運營商內部CASE聲明,如果你把WHEN後適當的文字值,將工作的問題。 您也可以使用CASE語句作爲BETWEEN運算符的第二個操作數。

我會認爲ToEmpAgeINT列:

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 
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
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

編寫一個查詢,將首字母顯示員工的名字大寫和小寫所有其他字母和部門沒有。對於其名稱的第二個字符介於'A'和'M'之間的所有員工,請給每個欄目一個適當的標籤。 我嘗試了一些不起作用的東西。我的工作代碼爲:

SELECT INITCAP(ename), deptno 
FROM emp 
WHERE ename LIKE BETWEEN ('_A%' AND '_M%');