2017-08-16 9 views
1

私は以下のSQlを持っています。すべての条件が、私はすべての..HereがSql Fiddleケースステートメントの条件から複数のデータを返す

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は、単一の値を返すために使用される式です。最初の条件が真であるため、1年目になります。 –

+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

はおそらく、あなたが条件を連結するフィドルで取得することができますどのように以下のSQLで満たされているので、今、私は唯一の<td class="HeaderData"> Year 1 </td>としてのリターンを得ます一緒に?

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あなたは本当ですか???サンプルデータを使用して完全に動作します。 –

関連する問題