在 SQL 中使用 PIVOT 正确地将行转换为列
Properly converting rows into columns using PIVOT in SQL
我已经设法将现有的行转换为列,但是转换不是生成 1 行,而是生成具有相同容器的 2 行。这是我的数据集。
SELECT distinct c.container, c.attribute, c.value, c.property from cars c
WHERE c.container = 'VOLVO'
---------------------------------------------------
| CONTAINER | ATTRIBUTE | VALUE | PROPERTY |
| VOLVO | TIRE | DUNLOP | A |
| VOLVO | SEATS | 4 | A |
| VOLVO | PRICE | 25,000 | B |
| VOLVO | COLOR | BLUE | A |
| VOLVO | MODEL | XC90 | A |
SELECT * FROM cars
PIVOT( max(value) for attribute IN ([TIRE],[SEATS],[PRICE],[COLOR],[MODEL])) P
WHERE container = 'VOLVO'
---------------------------------------------------------------------------
| CONTAINER | PROPERTY | TIRE | SEATS | PRICE | COLOR | MODEL
---------------------------------------------------------------------------
| VOLVO | A | DUNLOP | 4 | NULL | BLUE | XC90
| VOLVO | B | NULL | NULL | 25,000 | NULL | NULL
我如何合并这两行并产生这个结果?
---------------------------------------------------------------------------
| CONTAINER | PROPERTY | TIRE | SEATS | PRICE | COLOR | MODEL
---------------------------------------------------------------------------
| VOLVO | A | DUNLOP | 4 | 25,000 | BLUE | XC90
谢谢!
你需要省略 属性:
SELECT * FROM (
select CONTAINER, VALUE, ATTRIBUTE from cars
) S
PIVOT( max(value) for attribute IN ([TIRE],[SEATS],[PRICE],[COLOR],[MODEL])) P
WHERE container = 'VOLVO'
结果:
CONTAINER TIRE SEATS PRICE COLOR MODEL
VOLVO DUNLOP 4 25,000 BLUE XC90
我已经设法将现有的行转换为列,但是转换不是生成 1 行,而是生成具有相同容器的 2 行。这是我的数据集。
SELECT distinct c.container, c.attribute, c.value, c.property from cars c
WHERE c.container = 'VOLVO'
---------------------------------------------------
| CONTAINER | ATTRIBUTE | VALUE | PROPERTY |
| VOLVO | TIRE | DUNLOP | A |
| VOLVO | SEATS | 4 | A |
| VOLVO | PRICE | 25,000 | B |
| VOLVO | COLOR | BLUE | A |
| VOLVO | MODEL | XC90 | A |
SELECT * FROM cars
PIVOT( max(value) for attribute IN ([TIRE],[SEATS],[PRICE],[COLOR],[MODEL])) P
WHERE container = 'VOLVO'
---------------------------------------------------------------------------
| CONTAINER | PROPERTY | TIRE | SEATS | PRICE | COLOR | MODEL
---------------------------------------------------------------------------
| VOLVO | A | DUNLOP | 4 | NULL | BLUE | XC90
| VOLVO | B | NULL | NULL | 25,000 | NULL | NULL
我如何合并这两行并产生这个结果?
---------------------------------------------------------------------------
| CONTAINER | PROPERTY | TIRE | SEATS | PRICE | COLOR | MODEL
---------------------------------------------------------------------------
| VOLVO | A | DUNLOP | 4 | 25,000 | BLUE | XC90
谢谢!
你需要省略 属性:
SELECT * FROM (
select CONTAINER, VALUE, ATTRIBUTE from cars
) S
PIVOT( max(value) for attribute IN ([TIRE],[SEATS],[PRICE],[COLOR],[MODEL])) P
WHERE container = 'VOLVO'
结果:
CONTAINER TIRE SEATS PRICE COLOR MODEL
VOLVO DUNLOP 4 25,000 BLUE XC90