英文:
How to replace values in a column based on a condition in SQL?
问题
抱歉,如果这个问题有点儿愚蠢,因为我对SQL还相对陌生。
我有一个表格(TEST),包含3列,这三列都是ID列。
我想要在列A中替换值为列B中的值,前提是列B中的值不是NULL。
如果列B中的值是NULL,我想要用列C中的值来替换列A中的值。
谢谢!
英文:
Apologies if this is a silly questions as I am fairly new to SQL.
I have a table (TEST) with 3 columns; all three columns are ID columns.
I want to replace the values in column A with the values in column B if the values in column B are not NULL.
If values in column B are NULL I want to replace the values in column A with the values of column C.
Thanks!
答案1
得分: 2
对于常见的“当列为空时使用其他值”的需求,SQL数据库管理系统提供了几种选项 - 通常是函数,例如 IFNULL()、NVL()、COALESCE()。
在这种情况下,COALESCE 是一个很好的选择,因为它简洁明了,并且直接满足需求:它返回从左到右的第一个输入参数的值,该参数不为 NULL。
结合 UPDATE 命令,可以使用以下方式创建所需的效果:
UPDATE test
SET a = COALESCE(b, c);
提示: 为了预览 UPDATE 语句的结果,可以随时编写相应的 SELECT 语句:
SELECT a
, b
, c
, COALESCE(b, c) AS new_a
FROM
test;
英文:
For the common "when column IS NULL then use some other value" requirement SQL DBMS provide several options - typically functions e.g. IFNULL(), NVL(), COALESCE().
COALESCE is a good choice in this case as it is concise and maps to the requirement in a direct way: it returns the value of the first input parameter - starting from the left-most - that is not NULL.
Combined with the UPDATE command the desired effect can be created with:
UPDATE test
SET a = COALESCE(b, c);
Hint: in order to pre-view what the result of the UPDATE statement will look like, one can always write a corresponding SELECT statement:
SELECT a
, b
, c
, COALESCE(b, c) AS new_a
FROM
test;
答案2
得分: 0
尝试这个:
CREATE TABLE #temp (
Col_A nvarchar(10),
Col_B nvarchar(10),
Col_C nvarchar(10)
)
INSERT INTO #temp VALUES ('a', 'b', 'c')
INSERT INTO #temp VALUES ('aa', null, 'cc')
INSERT INTO #temp VALUES ('aaa', null, 'ccc')
INSERT INTO #temp VALUES ('aaaa', 'b', 'ccccc')
UPDATE #temp SET Col_A = CASE WHEN Col_B IS NOT NULL THEN Col_B ELSE Col_C END;
SELECT * FROM #temp;
DROP TABLE #temp;
请注意,我仅提供了代码的翻译部分。
英文:
Try this:
Create TABLE #temp (
Col_A nvarchar(10),
Col_B nvarchar(10),
Col_C Nvarchar(10)
)
insert into #temp values ('a', 'b', 'c')
insert into #temp values ('aa', null, 'cc')
insert into #temp values ('aaa', null, 'ccc')
insert into #temp values ('aaaa', 'b', 'ccccc')
UPDATE #temp SET Col_A = CASE WHEN Col_B is Not Null THEN Col_B ELSE Col_C END;
SELECT * from #temp
Drop TABLE #temp
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论