-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 と名前のペアごとに、デフォルトで値がカンマで連結されます。

于 2013-10-03T12:56:44.100 に答える
0

あなたがやろうとしていることは少し汚いようです。ちなみに、私はEMPTY手段を想定していますNULL

グループ化して、グループの最大値を取得できます。例で示したのと同じように、グループに null 以外の値が複数ある場合は、1 つ (最大値) のみを保持することに注意してください。

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

groupは予約語であり、クエリをより標準的なidものにするために group byおよびも使用できることに注意してください。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 に答える