-1

你知道用非空值对行进行分组的方法吗?

例如:

ID  title  description address   
------------------------------------
1 | john | row1      |   EMPTY      
1 | john | EMPTY     |     2     
1 | john | EMPTY     |   EMPTY   

结果

ID  title  description address
------------------------------------
1 | john | row1    |  2    

SELECT 是一个 UNION:

SELECT 
    id, 
    title, 
    description, 
    address 
FROM 
( 
    SELECT a.id, a.title, b.value as description, "" as address
    FROM #__content as a 
    LEFT JOIN #__fieldsattach_values as b ON a.id = b.articleid 
    WHERE a.catid IN (15, 16) 
    AND b.fieldsid = 4 AND a.language = "ca-ES" AND a.state = "1" 
    GROUP BY a.id UNION ALL SELECT a.id, a.title, "" as description , b.value as address  
    FROM #__content as a LEFT JOIN #__fieldsattach_values as b ON a.id = b.articleid 
    WHERE a.catid IN (15, 16) AND b.fieldsid = 5 AND a.language = "ca-ES"
    AND a.state = "1" GROUP BY a.id
) AS z
4

2 回答 2

0

在 MySQL 上,您可以像这样使用 GROUP_CONCAT 函数:

SELECT ID, Name, 
    GROUP_CONCAT(Direction) AS Direction, 
    GROUP_CONCAT(Group) AS Group, 
    GROUP_CONCAT(Profile) AS Profile
FROM MyTable
GROUP BY ID, Name

如果一列中有多个非空值,则对于每一对 ID 和 Name,这些值将默认用逗号连接。

于 2013-10-03T12:56:44.100 回答
0

你试图做的似乎有点脏。顺便说一句,我假设EMPTY手段NULL

您可以分组并获得该组的最大值。请记住,与您在示例中显示的方式相同,如果您在组中有多个非空值,您将只保留一个(最大值):

select id, name, max(direction), max(`group`), max(profile) from name_table
group by id

请注意,这group是一个保留字,您还可以分组,id使name查询更加标准

编辑:

根据您激进的问题编辑,您可以执行以下操作以保持相同的逻辑:

select id, name, max(direction), max(`group`), max(profile) from (
    Select ID, Name, Direction, "" as Group, "" Profile FROM name_table
    UNION ALL
    Select ID, Name, "" a Direction, group Group, "" Profile FROM name_table
    UNION ALL
    Select ID, Name, "" a Direction, "" Group, profile Profile FROM name_table
) s
group by id

请记住group是保留字。

于 2013-10-03T13:00:11.483 回答