2

当与column_1匹配时,如果column_1的计数大于1,我正在尝试创建一个合并列,如果为1,则只是其中一列的值。到目前为止,我可以让列正确合并,但它只返回第一行,而不是全部。

示例表

id, col_1,   col_2,   col_3
---------------------------
1, 'Name1', 'Value',  '1',
2, 'Name2', 'Value',  '2',
3, 'Name2', 'Value',  '3',
4, 'Name3', 'Value2', '1',
5, 'Name2', 'Value3', '1';

我想回来

2, Name2, Value 2
3, Name2, Value 3
5, Name2, Value3

到目前为止我所做的尝试

SELECT id,
IF (count(col_2) > 1, concat(col_2, ' ', col_3), col_2) as merge
FROM mytable 
where col_1 = 'Name2'

仅返回 '2, Value 2' 感谢您的帮助。我在http://sqlfiddle.com/#!2/9ce7e/7搞砸了

4

2 回答 2

1

尝试这个

select t.id, t.col_1,
IF (t2.cnt > 1, concat(t.col_2, ' ', t.col_3), t.col_2) as merge
from mytable t
inner join 
(
  SELECT col_1, col_2, count(*) as cnt
  From myTable
  where col_1 = 'Name2'
  group by col_1, col_2
) t2 on t2.col_1 = t.col_1 and t2.col_2 = t.col_2

输出

ID  COL_1   MERGE
2   Name2   Value 2
3   Name2   Value 3
5   Name2   Value3

当我在问题中的小提琴链接上播放时,这很有效。

于 2013-05-22T17:47:07.660 回答
0

count()是一个聚合函数,因此它返回单行作为输出。

您可以使用以下查询以确保col_2在连接之前具有一些值

SELECT id,
IF (col_2 <> "" , concat(col_2, ' ', col_3), col_2) as merge
FROM mytable 
where col_1 = 'Name2'
于 2013-05-22T17:38:27.263 回答