sql - 使用 case 语句设置查询
问题描述
我正在尝试执行此查询
但我得到一个语法错误
运行 MS SQL 管理工作室
关键字“CASE”附近的语法不正确。
我的查询
update [Test$ABC]
Set [Unit Price] =(
CASE WHEN [Item No_]= '12345' THEN '445'
CASE WHEN [Item No_]= '67890' THEN '645'
END
)
where [Item No_] in ('12345','67890')
and [Sales Start Date]='01/Apr/19'
and [Store No_]=''
解决方案
我会这样写:
update [Test$ABC]
set [Unit Price] = (CASE WHEN [Item No_] = 12345 THEN 445
WHEN [Item No_] = 67890 THEN 645
ELSE [Unit Price]
END)
where [Item No_] in (12345, 67890) and
[Sales Start Date] = '2018-04-01' and
[Store No_] = '';
笔记:
[Item No_]
可能是一个数字,所以只能与数字比较。Price
几乎可以肯定是一个数字,所以不需要单引号。ELSE
如果您有错字,可以节省问题。如果 中的列表与CASE
不匹配WHERE
,那么这不会是update
其他行。- 日期应存储为日期,比较值应使用标准格式——YYYY-MM-DD。
推荐阅读
- python - 从大量 URL 中抓取信息
- sql - 基于多个外键的最佳匹配集合的连接表,每个外键都可以为空
- android - React Native - 如何在函数语句中设置状态?
- python - 这两种解决方案的时间复杂度是多少?
- go - Go vs Rust 垃圾收集器的性能和类型
- scala - 如何在两个objetcs scala列表中找到相同的值
- sql-server - 离线服务器状态控制
- arrays - 如何在 PostgreSQL 中获取数组元素的“数值精度”、“数值比例”和“日期时间精度”元数据?
- vue.js - 使用 BootstrapVue 以编程方式编写导航链接的正确方法
- c# - Windows 用于证书吊销(OCSP 或 CRL)的算法是什么以及如何配置它们?