2016-06-30 12 views
0

where文にcase when句を使用して、2つの異なるカテゴリに属する​​場合に値を返そうとしています。条件 'Where'句内のケースの場合T-SQL

これは、これまでの私のコードです:ここでは

create view dbo.eightmonthinc 
as 
select * 
from dbo.rentincreaseview 
where 
    case when [days same form] <= 9 
    then datediff(month, leasedate ,'2016-08-01 00:00:00') >= 8 
    else datediff(month, rentlastchanged ,'2016-08-01 00:00:00') >= 12) 
    end 
go 

は私がやろうとしています何のダウン口頭で休憩です。

私の同じ日数が値< = 9を返す場合、リース日付と未来の日付の差が> = 8の場合にのみ値を返したいと思います。

私の同じ日数が9より大きい場合、最後に変更された家賃と将来の日付との差が> = 12の場合にのみ値を返したいとします。

しかし、両方のデータセットを同じクエリで返す必要があります。残念ながら、私は '間違った構文'エラーを取得し続けます。

私はまだ学んでいるので、これを修正する方法について少し不明です。どんな助けでも大歓迎です。

代わりに、あなたは(入力に基づいて異なるブール式を評価する)ような caseステートメントを使用することはできませんが、ブールとあなたのロジックを書き換えることができANDとOR
+0

私の答えで論理エラーが修正されました。これをチェックしてください。古いバージョンでは間違った結果が出ます。その答えは、エラーを指摘ゴードンLinoffに信用。 – Blorgbeard

答えて

1

where 
    ([days same form] <= 9 and 
    datediff(month, leasedate ,'2016-08-01 00:00:00') >= 8) 
    or 
    ([days same form] > 9 and 
    datediff(month, rentlastchanged ,'2016-08-01 00:00:00') >= 12)) 
1

あなた何を行うことができますあなたはcase文としてたいが、それはdatediff()への引数にする必要がある:

create view dbo.eightmonthinc as 
select * 
from dbo.rentincreaseview 
where ([days same form] <= 9 and datediff(month, leasedate, '2016-08-01') >= 8 
    ) or 
     ([days same form] > 9 and datediff(month, rentlastchanged, '2016-08-01') >= 12 
    ); 

正しいロジックがに比較を繰り返す必要があります。さらに、日付定数にhh:mm:ssは必要ありません。

0

私はこれがあなたがやろうとしていることだと信じていますが、それはおそらく受け入れられた答えに固執するでしょう。明らかに、以下のトリックはcase式をネストすることです。 caseは、多くの人が試したように、条件付きではなく値に評価されることを覚えておいてください。

select * 
from dbo.rentincreaseview 
where 
    case when [days same form] <= 9 then 
     case 
      when datediff(month, leasedate ,'2016-08-01') >= 8 then 1 
      when datediff(month, rentlastchanged ,'2016-08-01') >= 12) then 1 
     end 
    end 
go 

もゴードンでほのめかしたとして、あなたが試みることができる:

... 
where 
    datediff(
     month, 
     case when [days same form] then leasedate else rentlastchanged end, 
     '2016-08-01 00:00:00' 
    ) 
     >= 
    case when [days same form] <= 9 then 8 else 12 end 

これらのフォームが有用であることが分かる可能性があり、いくつかのケースがあります。ほとんどの場合、私はそれが良いアイデアだとは思っていません。