2

適切なタイトルがなくて申し訳ありませんが、これを他に説明する方法がわかりません。

id     fk_id     name     attr1     attr2     attr3     attr4
---------------------------------------------------
1      1         test     1         null      null      null
2      1         testa    null      2         null      null
3      1         testb    null      null      3         null
4      1         testc    null      null      null      4

これをグループ化して返す方法はありますか

id     fk_id     name     attr1     attr2     attr3     attr4
---------------------------------------------------
1      1         test     1         2         3         4

さらに情報が必要な場合はお知らせください。

4

1 に答える 1

4

最も簡単な答えは、すべての列でMAX()andを使用MIN()することですが、これは無効な結果になることがあります。

SELECT MIN(ID), fk_ID, MIN(name), 
       MAX(attr1) attr1, MAX(attr2) attr2, MAX(attr3) attr3, MAX(attr4) attr4
FROM   tableName
GROUP  BY fk_ID

上記のステートメントよりも優れたソリューションを次に示します。

SELECT  a.fk_ID, a.ID, a.Name,
        b.attr1, b.attr2, b.attr3, b.attr4
FROM    tableName a
        INNER JOIN
        (
            SELECT  fk_id, MIN(id) ID,
                    MAX(attr1) attr1, MAX(attr2) attr2, 
                    MAX(attr3) attr3, MAX(attr4) attr4
            FROM    tablename
            GROUP   BY fk_id
        ) b ON a.fk_id = b.fk_id AND a.ID = b.ID
于 2013-09-21T18:59:50.430 に答える