0

編集:

申し訳ありませんが、最初に明確にしませんでした。CompanyType は smallint、null ではなく、TotalLicenses は int、null です

基本的に私はそれを確認したいだけですTotalLicenses > 0 if C.CompanyType != 4

いくつかのリファレンス ガイドとチュートリアルを見ましたが、この例で意図したとおりに CASE WHEN を使用していることを確認できるものは見つかりませんでした。

有効期限が今日の日付以上で、DemoLicense が 0 に等しく、会社の種類が 4 でない場合は TotalLicenses が 0 より大きい場合、「購入済み」列を 1 に更新しようとしています。4 の場合は、 0

update WebCatalog.Published.DemoTracking
set Purchased = 1
from WebCatalog.Published.Company C
    inner join WebCatalog.Published.RCompany RC
        on C.RCompany = RC.Link
    inner join WebCatalog.Published.DemoTracking DT
        on C.PKey = DT.CompanyPKey and DT.Purchased = 0
where RC.Expiration >= Cast(GETDATE() as Date) and RC.DemoLicense = 0
and C.TotalLicenses > 
    Case 
        when C.CompanyType != 4 THEN 0
    END
4

3 に答える 3

1

第 1 に、DBMS によってケースの構造が異なると思います。そのため、以下は当てはまらない場合があります。

2番目 Else を指定していない場合、ケースは NULL を返します。NULL との比較も NULL であるため、行は返されません。これは、デフォルトのケースが必要であることを意味します。

したがって、おそらく次のように書く必要があります。

and C.TotalLicenses > 
    Case 
        when C.CompanyType != 4 THEN 0
        else -1
    END
于 2013-10-23T14:33:27.007 に答える
0

あなたが説明した方法とそれほど違いはありません:

update WebCatalog.Published.DemoTracking
set Purchased = 1
from WebCatalog.Published.Company C
        inner join WebCatalog.Published.RCompany RC
            on C.RCompany = RC.Link
        inner join WebCatalog.Published.DemoTracking DT
            on C.PKey = DT.CompanyPKey and DT.Purchased = 0
 where RC.Expiration >= Cast(GETDATE() as Date) and RC.DemoLicense = 0
 and (C.TotalLicenses > 0 or C.CompanyType = 4)
于 2013-10-23T14:50:25.480 に答える