2017-10-06 4 views
1

は、私は次のクエリを持っているところで選択する場合には、リストを返す:SQL Serverは、文の

SELECT cpa_0.[Period] as "Period", cpa_0.[Account] as "Account", cpa_0.[Center] as "Center", cpa_0.[Scenario] as "Scenario", cpa_0.[Effective_Date] as "Effective_Date" 
    FROM [dbo].[GLDetail] cpa_0 
    WHERE cpa_0.[Center] = $$Centers-VALUE$$ and 
      cpa_0.[Account] = $$Accounts-VALUE$$ and 
      cpa_0.[Period] = case 
      when $$View-VALUE$$ = 'Periodic' then $$Periods-VALUE$$ 
      when $$View-VALUE$$ = 'Y_T_D' then ('2017-09','2017-08') 
      end 

VALUE $$変数が渡されていると、彼らは正常に動作します。私の問題は$$ View-VALUE $$ = 'Y_T_D'( '2017-09'、 '2017-08')のときにクエリの最後の行に表示されますが、これは問題ありません。 varがY_T_Dに等しいときにリストを返す必要があります。どうすればいいのですか?

よろしく

+0

サイドノート:あなたがここで行うしようとしているものが同様にあなたが期待したとおりに動作しない場合があります。 [この質問](https://stackoverflow.com/questions/26919158/performance-considerations-for-conditional-queries-search-forms)とトップの回答にリンクされているブログ記事を参照してください。 –

答えて

2

WHERE句はブール式です。追加のブール式をCASE WHENでここに作成する必要はありません。単にANDORを使用してください。

SELECT 
    Period, 
    Account 
    Center, 
    Scenario, 
    Effective_Date 
FROM dbo.GLDetail 
WHERE Center = $$Centers-VALUE$$ 
    AND Account = $$Accounts-VALUE$$ 
    AND 
    (
    ($$View-VALUE$$ = 'Periodic' AND Period = $$Periods-VALUE$$) 
    OR 
    ($$View-VALUE$$ = 'Y_T_D' AND Period IN ('2017-09', '2017-08')) 
); 
0

このような句をどこで変更することができます。

SELECT cpa_0.[Period] as "Period", cpa_0.[Account] as "Account", cpa_0.[Center] as "Center", cpa_0.[Scenario] as "Scenario", cpa_0.[Effective_Date] as "Effective_Date" 
FROM [dbo].[GLDetail] cpa_0 
WHERE cpa_0.[Center] = $$Centers-VALUE$$ and 
     cpa_0.[Account] = $$Accounts-VALUE$$ and 
     case 
     when $$View-VALUE$$ = 'Periodic' AND cpa_0.[Period] = $$Periods-VALUE$$ THEN 1 
     when $$View-VALUE$$ = 'Y_T_D' AND cpa_0.[Period] IN ('2017-09','2017-08') THEN 1 
     ELSE 0 
     END = 1 
+0

みんなありがとう。 $$ periods.value $$を解析する必要があるので、いつytdが選択された期間より前にすべての期間を返す必要があるかを調べる必要があります。 – user1766419