0

私はMySQLを使用しています。

結合などを含む選択を使用して次の結果セットを生成しましたが、可能であれば NULL を削除して、2 番目のテーブルと同様の結果を生成したいと考えています。

-----------------------------------
|#|IMG_KEY|IMAGE|XX_STYLE|YY_STYLE|
-----------------------------------
|1|   1   |PIX01| <NULL> | STYLEB |
|2|   1   |PIX01| STYLEA | <NULL> |
|3|   2   |PIX02| <NULL> | STYLEB |
|4|   2   |PIX02| STYLEA | <NULL> |
|5|   3   |PIX03| <NULL> | STYLEB |
|6|   3   |PIX03| STYLEA | <NULL> |
-----------------------------------

注: XX_STYLE&YY_STYLEは計算列です。

-----------------------------------
|#|IMG_KEY|IMAGE|XX_STYLE|YY_STYLE|
-----------------------------------
|1|   1   |PIX01| STYLEA | STYLEB |
|2|   2   |PIX02| STYLEA | STYLEB |
|3|   3   |PIX03| STYLEA | STYLEB |
-----------------------------------

GROUP BYand/or HAVINGetc キーワードの組み合わせを使用してこれを行うことは可能ですか。私は試してみましCOALESCEたが、役に立ちませんでした。

4

3 に答える 3

1

使ってみてくださいGROUP_CONCAT():

SELECT MIN(ID) ID, IMG_KEY, IMAGE
  ,GROUP_CONCAT(XX_STYLE) XX_STYLE
  ,GROUP_CONCAT(YY_STYLE) YY_STYLE
FROM MyTable
GROUP BY IMG_KEY, IMAGE

結果:

| ID | IMG_KEY | IMAGE | XX_STYLE | YY_STYLE |
----------------------------------------------
|  1 |       1 | PIX01 |   STYLEA |   STYLEB |
|  3 |       2 | PIX02 |   STYLEA |   STYLEB |
|  5 |       3 | PIX03 |   STYLEA |   STYLEB |

1から始まる行番号を取得するには、これを試してください:

SELECT @Row:=@Row+1 AS ID, IMG_KEY, IMAGE
  ,GROUP_CONCAT(XX_STYLE) XX_STYLE
  ,GROUP_CONCAT(YY_STYLE) YY_STYLE
  FROM MyTable
     , (SELECT @Row:=0) r
GROUP BY IMG_KEY, IMAGE

結果:

| ID | IMG_KEY | IMAGE | XX_STYLE | YY_STYLE |
----------------------------------------------
|  1 |       1 | PIX01 |   STYLEA |   STYLEB |
|  2 |       2 | PIX02 |   STYLEA |   STYLEB |
|  3 |       3 | PIX03 |   STYLEA |   STYLEB |

このSQLFiddleを参照してください

于 2013-08-06T05:06:10.613 に答える