0

こんにちは、これは簡単な修正だと思いますが、わかりません。完了日 (CompleteDate-CurrentDate) (これらの数値はマイナスになります) が期限切れのレコードにレポートの「期限切れ」のラベルを付けようとしています。また、負でない数値のレコードは変更されないようにしたいと思います。これは、現在NULLエントリを提供しているコードのスニペットです

Select    CASE DATEDIFF(targetcompletedate, NOW()) 
        When count(*) <=0 then 'Overdue'
    END 'Days Left',

どんな助けでも大歓迎ですありがとう

4

3 に答える 3

3

には 2 つのバリアントがありますCASE

  1. CASE
      WHEN condition1 THEN result1
      WHEN condition2 THEN result2
      ...
      ELSE result_else
    END
    
  2. CASE scalar_expression
      WHEN value1 THEN result1
      WHEN value2 THEN result2
      ...
      ELSE result_else
    END
    

あなたの場合、特定の値ではなく範囲と比較しているため、最初の構文にする必要があります。代わりに、クエリは実際には 2 番目の構文を使用しています。式はブール値に評価され、結果count(*)<=0によって暗黙的に整数型に変換されます。DATEDIFF

次のような最初の構文を使用するだけです。

select case when targetcompletedate is null
            then 'Not set'
            when DATEDIFF(targetcompletedate, NOW()) <= 0
            then 'Overdue'                
            else DATEDIFF(targetcompletedate, NOW())
       end as 'Days Left'
于 2013-05-14T17:21:02.000 に答える
2

datediff()以下を完全に削除することをお勧めします。

Select (CASE when targetcompletedate <= NOW() the 'Overdue' else 'Days Left' end)

物事を数字で示したい場合は、datediff(). わかりやすくするために、明示的に文字列に変換します。

select (case when targetcompletedate <= NOW() then 'Overdue'
              else cast(DATEDIFF(targetcompletedate, NOW()) as varchar(255))
        end)

多分:

select (case when targetcompletedate <= NOW() then 'Overdue'
              else concat(DATEDIFF(targetcompletedate, NOW()), ' days left')
        end)

哲学は次のとおりです。必要なものを表現するためのより簡単で明確な方法がある場合は、関数を使用しないでください。

ただし、各グループの数を数えたいかどうかは疑問です。

select sum(case when targetcompletedate <= NOW() then 1 else 0 end) as NumOverdue,
       sum(case when targetcompletedate <= NOW() then 0 else 1 end) as NumWithDaysLeft
于 2013-05-14T17:37:13.447 に答える
-1

このコードを試してみてください:

SELECT
    CASE 
        WHEN datediff(dd,targetcompletedate,now()) <= 0 THEN 'Overdue'
        WHEN datediff(dd,targetcompletedate,now()) > 0 THEN 'Days_left' 
    ELSE NULL END,
    datediff(dd,targetcompletedate,now()) AS 'days'
FROM tablename

出力は次のようになります。

延滞 -23

Days_left 13

于 2014-07-30T20:43:05.593 に答える