クエリ結果を変換する必要があるため、同じ外部キーを持つ複数の行は 1 つの行にすぎません。グループ化でそれを行うことができます。問題は、私の列の 1 つで、いくつかの列を異なるグループに連結したいということです。たとえば、私のテーブルには次のようなものが含まれています。
shopId Brand Category Color QTY
----------------------------------------------
15 Dell NoteBook Red 5
15 Dell NoteBook Blue 1
15 HP NoteBook red 2
15 HP NetBook red 3
14 Sony NoteBook yellow 1
14 Acer Tablet red 10
Brand、Category、および Color はすべて、外部キーから取得されます。この結果を次のように提示したい
ShopId Dell Color HP Color etc...
-----------------------------------------------------------
15 6 red:5, Blue:1 2 red:2
14 ..............
私のクエリでは、それらを shopId でグループ化し、sum ステートメントと case ステートメントを使用して各ブランドとカテゴリの合計数量を見つけるのは簡単な作業でした。私の問題は、ショップ、カテゴリ、ブランドのグループ化の色と数量を連結するにはどうすればよいですか (合計のグループ化は、ショップ、カテゴリ、ブランドではなく、shopId ごとです)。
私のタバレは
CREATE TABLE `shopstorage` ( `color` int(11) NOT NULL, `category` int(11) NOT NULL, `brand` int(11) NOT NULL, `shop` int(11) NOT NULL, `date` 日付 NOT NULL, `qty` tinyint(4) NOT NULL, PRIMARY KEY (`color`,`category`,`brand`,`shop`,`date`), KEY `clrEpClr` (`color`), KEY `clrEpCat` (`category`), KEY `clrEpshop` (`ショップ`), KEY `clrEpBrand` (`ブランド`), CONSTRAINT `SSBrand` FOREIGN KEY (`brand`) REFERENCES `brand` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSCat` FOREIGN KEY (`category`) REFERENCES `productcategory` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSClr` FOREIGN KEY (`color`) REFERENCES `color` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `SSShop` FOREIGN KEY (`shop`) REFERENCES `shop` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) エンジン=InnoDB デフォルト文字セット=utf8
私の不完全なクエリは
選択する 店.名前、店.階、店.番号、 sum(brand.name ='ASUS' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) の場合、ASUS として、 sum(brand.name ='HP' and productcategory.name='NoteBook' then shopstorage.qty else 0 endの場合)をHPとして、 sum(case when brand.name ='Sony' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) as Sony, sum(brand.name ='Dell' and productcategory.name='NoteBook' then shopstorage.qty else 0 end) の場合、Dell として、 sum(brand.name ='ASUS' and productcategory.name='NetBook' then shopstorage.qty else 0 end) の場合、ASUS として、 sum (brand.name ='HP' and productcategory.name='NetBook' then shopstorage.qty else 0 end) の場合、HP として、 sum(brand.name ='Sony' and productcategory.name='NetBook' then shopstorage.qty else 0 end) の場合、Sony、 sum(brand.name ='Dell' and productcategory.name='NetBook' then shopstorage.qty else 0 end) の場合、Dell として、 sum(brand.name ='ASUS' and productcategory.name='Tablet' then shopstorage.qty else 0 end) の場合、ASUS として、 sum(brand.name ='HP' and productcategory.name='Tablet' then shopstorage.qty else 0 endの場合)をHPとして、 sum(brand.name ='Sony' and productcategory.name='Tablet' then shopstorage.qty else 0 end) の場合、Sony、 sum(brand.name ='Dell' および productcategory.name='Tablet' の場合、shopstorage.qty、それ以外の場合は 0 end) as Dell ショップストレージから shopstorage.brand=brand.id でブランドに参加 shopstorage.color=color.id で色に参加 shopstorage.category=productcategory.id で productcategory に参加 shop.id = shopstorage.shop でショップに参加 shopstorage.shop ごとにグループ化
たとえば、HP が 15 の場合、各色の数量を指定するために各合計の後に列を追加する方法を探しています。7 つの赤と 8 つの青のノートブックがあります。GROUP_Concat を試しましたが、間違ったグループ化のために正しい結果が表示されませんでした。