2017-10-19 11 views
0

次のコードの影響を受ける更新された行の数を表示したいと思います。ケースステートメントに基づいて更新結果を表示

UPDATE [document] 
SET CalculatedTime = CASE WHEN DATEPART(hh, PrimaryDate) < 9 
          THEN 'Pre-9AM' 
          ELSE CASE WHEN datepart(hh, PrimaryDate) >= 9 AND datepart(hh, PrimaryDate) <= 18 
              THEN 'Between 9AM-6AM' 
              ELSE CASE WHEN datepart(hh, PrimaryDate) > 18 
                 THEN 'Post-6PM' 
                 ELSE '' 
               END 
            END 
        END 

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

TimeCalculation Count 
--------------------- 
Pre-9AM   10 
Between 9AM-6AM 583 
Post-6PM   0 

すべてのヘルプは歓迎です!

SELECT CalculatedTime, COUNT(*) 
FROM [document] 
GROUP BY CalculatedTime; 

あなたは、テーブル全体を更新するので、それが動作します:あなたが使用することができ、各ケースごとにカウントしたい場合

+0

ケース式をネストする必要はありません。 1つのケースで十分です。 – jarlh

答えて

2

まず第一に、ネストされたCASE

update [document] 
SET CalculatedTime = 
     case when DATEPART(hh,PrimaryDate) < 9 then 'Pre-9AM' 
      when datepart(hh,PrimaryDate) >= 9 
       AND datepart(hh,PrimaryDate) <= 18 then 'Between 9AM-6AM' 
      when datepart(hh,PrimaryDate) > 18 then 'Post-6PM' 
      else '' 
     end ; 

第二には必要ありません。

MERGEを使用して

SELECT CalculatedTime, COUNT(*) AS count 
FROM (
MERGE [document] trg 
USING (SELECT 1 AS c) src 
    ON trg.id = trg.id 
WHEN MACHED THEN 
    UPDATE SET CalculatedTime = 
     case when DATEPART(hh,PrimaryDate) < 9 then 'Pre-9AM' 
      when datepart(hh,PrimaryDate) >= 9 
       AND datepart(hh,PrimaryDate) <= 18 then 'Between 9AM-6AM' 
      when datepart(hh,PrimaryDate) > 18 then 'Post-6PM' 
      else '' 
     end 
OUTPUT $action, inserted.CalculatedTime 
) s(action, CalculatedTime) 
WHERE action = 'UPDATE' 
GROUP BY CalculatedTime 
0

あなたがテーブルにUPDATE出力を使用することができます。

Declare @document table (CalculatedTime varchar(50)); 

    UPDATE [document] 
     SET CalculatedTime = 
       Case when DATEPART(hh,PrimaryDate) < 9 then 'Pre-9AM' 
        when datepart(hh,PrimaryDate) >= 9 
         AND datepart(hh,PrimaryDate) <= 18 then 'Between 9AM-6AM' 
        when datepart(hh,PrimaryDate) > 18 then 'Post-6PM' 
        else '' 
       End 
      OUTPUT INSERTED.CalculatedTime INTO @document 

    SELECT CalculatedTime as TimeCalculation, COUNT(*) as Count 
     FROM @document 
      GROUP BY CalculatedTime; 
関連する問題