如果另一列具有计数>则合并列1

时间:2013-05-22 17:19:49

标签: mysql sql

当匹配到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

时搞砸了

2 个答案:

答案 0 :(得分: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

当我在问题中使用小提琴链接时,这很有用。

答案 1 :(得分:0)

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

您可以在连接

之前使用以下查询以确保col_2具有某些值
SELECT id,
IF (col_2 <> "" , concat(col_2, ' ', col_3), col_2) as merge
FROM mytable 
where col_1 = 'Name2'