2017-07-03 5 views
-1

私はトラック内のタイヤのブランドを表す観測のための6つの変数のセットを持っています。ブランドはタイヤによって異なる場合がありますが、通常はすべて同じです。 私はタイヤのすべてのブランドの各観測値をリストする要約変数を作成する必要があります。繰り返しなしで計算された変数で一連の変数を連結する方法

単純なSELECT CONCAT(BrandP1, ', ', BrandP2...) AS Brandは、通常、多くの繰り返しを与えます。

私はN-1変数が異なる場合にのみN変数を連結することを考えましたが、そうするのはかなり醜いです。 6つの変数の内容を1つの新しい計算された変数に要約するエレガントな方法はありますか?

としては、テーブルの抽出物を要請:

ID_vehicle, BrandP1, BrandP2, BrandP3, BrandP4 
---------------------------------------------- 
1 Dunlop Dunlop Riken Riken 
2 Dunlop Dunlop Dunlop Dunlop 
3 Riken  Dunlop Toyo  Toyo 

私は何を取得したいのですが、私はCONCATを得ることができますどのような

ID_vehicle, Brand 
------------------ 
1 Dunlop, Riken 
2 Dunlop 
3 Riken, Dunlop, Toyo 

1 Dunlop, Dunlop, Riken, Riken 
2 Dunlop, Dunlop, Dunlop, Dunlop 
3 Riken, Dunlop, Toyo, Toyo 
+0

あなたの質問を更新して、適切なデータサンプルを追加し、期待される結果を表示してください。 – scaisEdge

+0

https://stackoverflow.com/help/mcveをご覧ください。 –

+0

あなたがそれを行う方法はいくつかあります。独特の複合キーだけでなく、Distinctキーワードを調べる必要があります。 –

答えて

1

以上ですエレガントなソリューションはブランドとタイヤの位置を別の列として「ブランド」表を再設計することです。次に、各観察中に発見/使用されたブランドを一覧表示するのにDISTINCTGROUP_CONCATを使用することができます。ような何か:

ID, Position, Brand 
---------------------- 
1, 1, Dunlop 
1, 2, Dunlop 
1, 3, Dunlop 
1, 4, Toyo 
1, 5, Riken 
1, 6, Riken 
2, 1, Riken 
2, 2, Dunlop 
2, 3, Dunlop 
2, 4, Riken 
2, 5, Dunlop 
2, 6, Riken 

のようにまとめることができます:

SELECT ALL 
    `observation_id`, 
    GROUP_CONCAT(DISTINCT `tire_brand` SEPARATOR ', ') 
FROM 
    `truck_observations` 
GROUP BY 
    `observation_id` 

と同様の観察がそのよう

ID, Brands 
---------------------- 
1, (Dunlop, Toyo, Riken) 
2, (Riken, Dunlop) 
0

私はcouldnが、私は、部分的には、@ a3r0のおかげでそれを考え出しました新しいテーブルを作成したり、データベーススキーマを変更したりしないでください。

だから、私は と興味を持っているし、次にIDで元のテーブルの一致でそれに参加した変数をトランスポーズするには

SELECT ALL 
    ID, 
    GROUP_CONCAT(DISTINCT Brand SEPARATOR ', ') AS BrandP 
FROM (
    SELECT ID, Wheel, Brand FROM (
     SELECT ID, 'BrandP1' Wheel, BrandP1 Brand FROM Pneumatici 
     UNION ALL 
     SELECT ID, 'BrandP2', BrandP2 FROM Cars 
     UNION ALL 
     SELECT ID, 'BrandP3', BrandP3 FROM Cars 
     UNION ALL 
     SELECT ID, 'BrandP4', BrandP4 FROM Cars 
     UNION ALL 
     SELECT ID, 'BrandP5', BrandP5 FROM Cars 
     UNION ALL 
     SELECT ID, 'BrandP6', BrandP6 FROM Cars 
    ) AS y 
    WHERE Brand != '' 
) AS x 
GROUP BY ID 

を行ってきました。

関連する問題