我在SQL表中有一堆发票,其中有一个名为“Status”的字段。
有两种可能的状态:“P”或“U”。
我想选择所有发票但是,我想将“P”的所有实例替换为“已发布”,将所有“U”实例替换为“未批准”。
以下查询完全符合我的要求,但一次只能执行一条记录。
Replace(Type, 'U', 'Unapproved')
如何让“替换”功能工作,使列中的所有记录都替换为“已发布”或“未批准”?
例如,我想更改此表:
+-----------+--------+
| Invoice # | Status |
+-----------+--------+
| 00001921 | P |
| 00001932 | P |
| 0001937 | P |
| 00890483 | U |
| 00902945 | U |
| 08MAY14 | P |
| 1012 | P |
| 10619 | P |
| 10620 | P |
| 10633 | P |
| 10641 | P |
| 130 | P |
| 1303 | P |
| 1307 | P |
| 217731 | U |
| 2714 | U |
| 2720 | P |
| 6523 | P |
| 712 | P |
+-----------+--------+
进入这个:
+-----------+------------+
| Invoice # | Status |
+-----------+------------+
| 1921 | Posted |
| 1932 | Posted |
| 1937 | Posted |
| 890483 | Unapproved |
| 902945 | Unapproved |
| 8-May-14 | Posted |
| 1012 | Posted |
| 10619 | Posted |
| 10620 | Posted |
| 10633 | Posted |
| 10641 | Posted |
| 130 | Posted |
| 1303 | Posted |
| 1307 | Posted |
| 217731 | Unapproved |
| 2714 | Unapproved |
| 2720 | Posted |
| 6523 | Posted |
| 712 | Posted |
+-----------+------------+
答案 0 :(得分:2)
使用这两个状态:
Update table set status = 'Unapproved' where status = 'U'
和
Update table set status = 'Posted' where status = 'P'
听起来你想要一个包含案例的select语句:
SELECT
CASE
WHEN status = 'P' THEN 'Posted'
WHEN status = 'U' THEN 'Unapproved'
END
FROM [table]
答案 1 :(得分:0)
UPDATE SampleTable
SET [Status] = CASE [Status]
WHEN 'P' THEN 'Posted'
WHEN 'U' THEN 'Unapproved'
END
选择强>
SELECT Invoice,
[Status] = CASE [Status]
WHEN 'P' THEN 'Posted'
WHEN 'U' THEN 'Unapproved'
END
FROM SampleTable
答案 2 :(得分:0)
必须嵌套替换语句。
SELECT `Invoice #`,
REPLACE( REPLACE (STATUS, 'U', 'UNAPPROVED') , 'P', 'POSTED')
as `STATUS` from Table;
其中Table是您的表的名称。
编辑:不要这样做。