2017-07-03 21 views
-1

我有一組6個變量,用於觀察代表卡車中輪胎的品牌。輪胎之間的品牌可能不同,但通常都是一樣的。 我需要創建一個彙總變量,列出每個觀察輪胎的所有品牌。如何串聯一個計算的變量中的一系列變量而不重複

一個簡單的SELECT CONCAT(BrandP1, ', ', BrandP2...) AS Brand通常會給出很多重複。

我想連接N變量只有當N-1變量不同時,但我看到這樣做很醜。有沒有一種將6個變量的內容總結爲一個新的計算變量的優雅方法?

按照要求表的摘錄:

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

我想什麼來獲得是

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

我可以CONCAT得到的是

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列出在每個觀察期間找到/使用的品牌。喜歡的東西:

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

這樣的意見類似:

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 

可以概括爲:

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

我想通了,這一部分要歸功於@ a3r0,雖然我不能不創建新表或更改數據庫模式。

所以我去

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 

要置我有興趣與 的變量,然後通過ID原始表匹配的加入。

相關問題