我有一组6个用于观察的变量,代表卡车中的轮胎品牌。轮胎之间的品牌可能不同,但通常都是相同的。 我需要创建一个汇总变量,列出每个观察轮胎的所有品牌。
一个简单的SELECT CONCAT(BrandP1, ', ', BrandP2...) AS Brand
通常会给出很多重复。
我只想在N-1变量不同的情况下连接N变量,但我觉得这样做非常难看。有没有一种优雅的方法可以将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 :(得分:1)
更优雅的解决方案可能是将您的品牌和轮胎位置重新设计为“品牌”表,作为单独的列。然后,您可以使用DISTINCT
GROUP_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)
答案 1 :(得分: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。匹配的原始表连接起来。