現在、以下のSQLにて、ECサイトの検索結果ページを表示するためのデータを得ています。
同じ商品コードでも色違いやサイズ違いがあればそれも別レコードとして取得されます。
今回、商品コードごとに1件のレコードとなるようにSQLを変更したいと思いましたが、
以下の状況ではGROUP BY句に集約関数のない項目はすべて含める必要があるようでして、
どのように変更すれば商品コードごとに1件ずつ取得可能か調べてもわかりませんでした。
(SELECTに書かれている項目はすべて必要です)
どうぞよろしくお願いします。
※補足
「T_商品.コード」が商品コードです。
商品コード以外の項目をMAX()などの文字列用の集約関数があれば、是非教えてください。
集約する場合はグループ内の文字列を連結するのではなく、どれか一つを表示したいです。
またコード側で結果を調整するという方法はなしでお願いいたします。
SQL
1SELECT T_商品.コード, T_商品.上代, T_商品色.画像1, T_品目.名称 AS 品目名, T_品目.分類, T_商品.SALE, T_商品.割引率, 2 T_メーカー.ブランド名 AS ブランド, MAX(T_商品色サイズ.入荷日) AS 入荷日, V_商品在庫.在庫数, T_商品色.色, 3 T_商品色サイズ.サイズ, T_サイズ.名称 AS サイズ名称 4FROM T_商品 INNER JOIN 5 T_品目 ON T_商品.品目 = T_品目.番号 INNER JOIN 6 T_メーカー ON T_商品.メーカー = T_メーカー.番号 INNER JOIN 7 T_商品色 ON T_商品.コード = T_商品色.商品 INNER JOIN 8 T_商品色サイズ ON T_商品.コード = T_商品色サイズ.商品 INNER JOIN 9 V_商品在庫 ON T_商品.コード = V_商品在庫.コード LEFT OUTER JOIN 10 T_サイズ ON T_商品色サイズ.サイズ = T_サイズ.番号 11WHERE (T_商品色.画像1 IS NOT NULL) AND (T_メーカー.ブランド名 IS NOT NULL) 12GROUP BY T_商品.コード, T_商品.上代, T_商品色.画像1, T_品目.名称, T_品目.分類, T_商品.SALE, T_商品.割引率, 13 T_メーカー.ブランド名, V_商品在庫.在庫数, T_商品色.色, T_商品色サイズ.サイズ, T_サイズ.名称 14ORDER BY 入荷日 DESC, T_商品.コード, T_商品色.色, T_商品色サイズ.サイズ, T_商品.上代, T_商品色.画像1, 品目名, 15 T_品目.分類, T_商品.SALE, T_商品.割引率, ブランド;";
回答2件
あなたの回答
tips
プレビュー