Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示基于case语句的更新结果_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

Sql 显示基于case语句的更新结果

Sql 显示基于case语句的更新结果,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我想显示受以下代码影响的更新行数 UPDATE [document] SET CalculatedTime = CASE WHEN DATEPART(hh, PrimaryDate) < 9 THEN 'Pre-9AM' ELSE CASE WHEN datepart(hh, PrimaryDate) >= 9 AND datepart(hh, PrimaryDate

我想显示受以下代码影响的更新行数

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

感谢您的帮助

首先,不需要嵌套大小写

它将起作用,因为您更新了整个表

使用合并:


首先,不需要嵌套CASE

它将起作用,因为您更新了整个表

使用合并:


可以将更新输出用于表

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;

可以将更新输出用于表

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;

不需要嵌套大小写表达式。一个case就足够了,不需要嵌套case表达式。一个案例就足够了。
SELECT CalculatedTime, COUNT(*)
FROM [document]
GROUP BY CalculatedTime;
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
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;