【发布时间】:2021-10-24 07:14:06
【问题描述】:
我有一个表,其中包含键值对以及与之相关的项目。
例如
| CAR_NAME | PART_TYPE | PART_NAME |
|---|---|---|
| VW | Tyre | Michelin 4WD |
| VW | Roof | Sun |
| Ford | Tyre | Michelin Sport |
| Ford | Roof | Glass |
| Audi | Tyre | Bridgestone |
| Audi | Roof | Soft |
| Mazda | Roof | Sun |
实际上大约有 60 种不同的零件类型。
我想获取轮胎不是米其林的汽车名称列表。
select * from cars
where
part_type = 'Tyre'
and part_name not like 'Michelin%'
这输出了奥迪,但是,即使没有指定轮胎名称,我仍然想包括马自达。
看起来枢轴会有所帮助,但我不完全理解枢轴语法以及之后如何执行 where 子句。
SELECT * FROM
(
SELECT car_name, part_type, part_name
FROM cars
)
PIVOT
(
LISTAGG(part_name ,',')
WITHIN GROUP (ORDER BY part_type)
FOR part_type IN (select distinct part_type from cars)
)
SQL 小提琴:http://sqlfiddle.com/#!4/c89dc/1
【问题讨论】: