2015-10-14 35 views
0

我想根据CASE声明选择数据。示例如下CASE语句中可以有WHILE循环吗?

select Id, name, address, 
     case when 
      department = CIS then @first 
      else @firstnew 
     end as "Date" 

这里@first给出的应该是查询下面

DECLARE @first date, @second date, @current date, @new date; 
SET @second='2015-12-15' 
SET @new='2015-08-10' 
SET @current = CONVERT(VARCHAR(10),GETDATE(),110) 
SET @first = '2015-08-15' 
WHILE @first <= @second 
BEGIN 
    SET @first = @new 
    WHILE @first <= @second 
    BEGIN 
     if @first >= @current 
     break; 
     SET @first = DATEADD(MONTH,1,@first) 
    END; 
    break; 
END; 

输出是否可以使用上面的查询输出@first的值作为第一SELECT语句的结果如果该部门等于CIS的情况?

+0

我相信你可以找到@First值,而那个丑陋while循环... –

+0

@Giorgi Nakeuri没得到的正确的答案,这就是为什么我提出了另一个问题解释我的senario – user2792602

+0

你应该编辑这个问题,而不是添加一个新的。你可以对答案发表评论,并详细说明它有什么问题。 –

回答

1

我觉得@firstnew等于DATEADD(MONTH, -1, DATEFROMPARTS(YEAR(@second), MONTH(@second), DAY(@new))),所以你的查询可以是这样的:

SELECT Id, name, address, 
    CASE WHEN department = 'CIS' THEN 
     @first 
    CASE WHEN @first > @second THEN 
     @first 
    CASE WHEN @new > @second THEN 
     @new 
    CASE WHEN DATEFROMPARTS(YEAR(@second), MONTH(@second), DAY(@new)) < @second THEN 
     DATEFROMPARTS(YEAR(@second), MONTH(@second), DAY(@new)) 
    ELSE 
     DATEADD(MONTH, -1, DATEFROMPARTS(YEAR(@second), MONTH(@second), DAY(@new))) 
    END AS [Date] 
...