[英]Concatenate two columns conditionally
I have MySQL table named table_1 : 我有一个名为table_1的 MySQL表:
mysql> select * from table_1;
+----------+-----------+----------+-------+
| col_1 | col_2 | col_3 | col_4 |
+----------+-----------+----------+-------+
| 123 | ABCD | TTTTT | 3 |
| 46542 | ABCD/HIJ | AAAAAAAA | 9 |
| 23 | ABCDEFGH | CCC | 45 |
| 5675 | ABCD/HIJ | NNNN | 0 |
| 65165 | NJFD | QQQQ | 0 |
| 165464 | NULL | HHH | 8 |
| 16546541 | ABCABC | LLLLLL | 0 |
| 764316 | ABCD/BBJH | NULL | 3 |
| 3125 | NULL | EEEEEE | 91 |
+----------+-----------+----------+-------+
9 rows in set (0.00 sec)
DDL: DDL:
CREATE TABLE IF NOT EXISTS table_1 (
col_1 INT(11) NOT NULL,
col_2 VARCHAR(45) DEFAULT NULL,
col_3 VARCHAR(10) DEFAULT NULL,
col_4 INT(11) NOT NULL
);
Insert data: 插入数据:
INSERT INTO table_1(col_1,col_2,col_3,col_4)
VALUES (123,'ABCD','TTTTT',3),
(46542,'ABCD/HIJ','AAAAAAAA',9),
(23,'ABCDEFGH','CCC',45),
(5675,'ABCD/HIJ','NNNN',0),
(65165,'NJFD','QQQQ',0),
(165464,NULL,'HHH',8),
(16546541,'ABCABC','LLLLLL',NULL),
(764316,'ABCD/BBJH',NULL,3),
(3125,NULL,'EEEEEE',91);
What I want to do is select col_1 and a new MySQL generated second column, say col_new. 我要选择的是col_1,然后是新的MySQL生成的第二列,例如col_new。
concat(col_3, 'v', col_4)
which in this case should be 'CCCv45'. concat(col_3, 'v', col_4)
,在这种情况下应为'CCCv45'。 I know I'll have to use concat
like: select col_1, concat(col_3, 'v', col_4) from table_1
我知道我必须像使用
concat
: select col_1, concat(col_3, 'v', col_4) from table_1
But how can I implement all the 4 conditions above? 但是如何实现上述所有四个条件?
Another way to write the CASE expression would be: 编写CASE表达式的另一种方法是:
select t.*,
case when col_2 is null then null
when col_3='CCC' then concat(col_3, 'v', col_4)
else col_3
end as new_col2
from table_1 t
SELECT col_1,
CASE
WHEN (col_2 IS NULL) OR (col_2 IS NOT NULL AND col_3 IS NULL) THEN NULL
WHEN col_2 IS NOT NULL AND col_3 = 'CCC' THEN concat(col_3, 'v', col_4)
WHEN col_2 IS NOT NULL AND col_3 IS NOT NULL THEN col_3
END
FROM table_1
http://sqlfiddle.com/#!9/eb2550/5 http://sqlfiddle.com/#!9/eb2550/5
Soltution 2 解决方案2
SELECT
col_1,
IF(
(col_2 IS NULL)
OR (
col_2 IS NOT NULL
AND col_3 IS NULL
),
NULL,
(
IF(
col_2 IS NOT NULL
AND col_3 = 'CCC',
concat(col_3, 'v', col_4),
col_3
)
)
)
FROM
table_1
http://sqlfiddle.com/#!9/eb2550/9 http://sqlfiddle.com/#!9/eb2550/9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.