2017-08-16 144 views
1

我有以下SQl。因为所有的条件都满足在下面的SQL我怎样才能得到现在,我只得到了回报<td class="HeaderData"> Year 1 </td>所有..Here是小提琴Sql Fiddle从Case语句条件返回多个数据

Declare @ContractTerm int 
Set @ContractTerm = 5 

Select Case When @ContractTerm >= 1 Then '<td class="HeaderData"> Year 1 </td>' 
    When @ContractTerm >= 2 Then '<td class="HeaderData"> Year 2 </td>' 
    When @ContractTerm >= 3 Then '<td class="HeaderData"> Year 3 </td>' 
    When @ContractTerm >= 4 Then '<td class="HeaderData"> Year 4 </td>' 
    When @ContractTerm >= 5 Then '<td class="HeaderData"> Year 5 </td>' End 

感谢

+1

什么是你期望的输出声明? CASE是一个用于返回单个值的表达式。因此,第一个条件是真的,所以你得到第一年。 –

+0

你的结果将始终有第1年。为什么不只是使用= 1或= 2而不是> = 1或> = 2等。 –

+0

因为如果@ContractTerm是5然后我想要所有的条件返回数据..很抱歉,我是SQL新手 – user1221989

回答

0

这将导致多少对@ContractTerm

DECLARE @ContractTerm INT 
DECLARE @Counter INT 
SET @ContractTerm = 5 
SET @Counter = 1 

WHILE @Counter <= @ContractTerm 
BEGIN 
    SELECT '<td class="HeaderData"> Year ' + CAST(@Counter AS VARCHAR) + ' </td>' 

    SET @Counter += 1 
END 
+0

这看起来不错..谢谢 – user1221989

+1

这里没有必要在这里给我一个循环。应该尽可能避免循环,这是没有循环的。 –

3

也许你想连接的条件一起?

Select ((Case When @ContractTerm >= 1 Then '<td class="HeaderData"> Year 1 </td>' else '' end) + 
     (case When @ContractTerm >= 2 Then '<td class="HeaderData"> Year 2 </td>' else '' end) + 
     (case When @ContractTerm >= 3 Then '<td class="HeaderData"> Year 3 </td>' else '' end) + 
     (case When @ContractTerm >= 4 Then '<td class="HeaderData"> Year 4 </td>' else '' end) + 
     (case When @ContractTerm >= 5 Then '<td class="HeaderData"> Year 5 </td>' else '' end) 
     ) as all_conditions 
+0

这是一个很好的猜测。 –

+0

感谢您的回复,但这不工作..如果变量是3或其他东西,它只是返回null – user1221989

+2

@ user1221989你确定?它可以完美地使用您的示例数据。 –