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;