2017-08-16 51 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你確定?它可以完美地使用您的示例數據。 –