如何将一列中的值转换为新表的标题?

时间:2019-06-20 19:06:52

标签: sql sql-server

我有一个包含三列的表,分别是“部件号”,“规格”和“值”,我需要创建一个表,其中所有数据都为VARCHAR,其中“规格”列中的每个值都显示为标题。 >

我尝试使用PIVOT,但是我不太了解它(我是新手);我正在使用SQLServer。

以下是原始表中的第一行:

Partnumber|Specifications|Value|
181504825 |Rotation      |CW   |
1541      |Belt Width (_)|7/16 |
156938    |Depth (mm)    |73   |
1522231   |Grooves       |6    |
1522236   |Grooves       |4    |
1522348   |Grooves       |4    |
1541      |Grooves       |1    |
181504825 |Height (mm)   |107.95|
156938    |Inlet (mm)    |11.5 | 

我需要创建一个像这样的新表:

Partnumber|Belt Width (_)|Depth (mm)|Grooves |Height (mm)|Inlet (mm)|Rotation|
1522231   |              |          |6       |           |          |        |
1522236   |              |          |4       |           |          |        |
1522348   |              |          |4       |           |          |        |
1541      |7/16          |          |1       |           |          |        |
156938    |              |73        |        |           |11.5      |        |
181504825 |              |          |        |107.95     |          |CW      |

每个部件号和标题必须不重复,并且顺序显示,某些部件号可以不显示信息,以后我可以删除该行。 我想提到的是,“规范”列在删除重复项后包含981个标题。

1 个答案:

答案 0 :(得分:0)

使用条件聚合

select Partnumber, max(case when Specifications='Rotation' then value end) as Rotation,
max(case when Specifications='Belt Width (_)|' then value end) as BeltWidth (_)|,
max(case when Specifications='Depth (mm)' then value end) as Depthmm,
max(case when Specifications='Grooves' then value end) as Grooves,
max(case when Specifications='Height (mm)' then value end) as Height,
max(case when Specifications='Inlet (mm)' then value end) as Inlet,
max(case when Specifications='Belt Width (_)' then value end) as belt
from table_name group by Partnumber