2017-10-19 1 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

대소 문자를 중첩 할 필요가 없습니다. 한 가지 사례만으로 충분합니다. – 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; 
관련 문제