当前位置: 首页 > 知识库问答 >
问题:

如何将表列转换为行[重复]

淳于博
2023-03-14

我有一张如下的桌子:

+-----------+------------+--------+
|   Col1    |    Col2    |  Col3  |
+-----------+------------+--------+
|  12345678 | FirstName  | John   |
|  12345678 | LastName   | Smith  |
| 987456321 | LastName   | Clancy |
| 987456321 | MiddleName | T      |
| 987456321 | Height     | 176cm  |
| 654125878 | FirstName  | Tan    |
| 654125878 | Weight     | 150lb  |
+-----------+------------+--------+

如何将其转换为:

+-----------+-----------+------------+----------+--------+--------+
|    ID     | FirstName | MiddleName | LastName | Height | Weight |
+-----------+-----------+------------+----------+--------+--------+
|  12345678 | John      | null       | Smith    | null   | null   |
| 987456321 | null      | T          | Clancy   | 176cm  | null   |
| 654125878 | Tan       | null       | null     | null   | 150lb  |
+-----------+-----------+------------+----------+--------+--------+

共有1个答案

东郭海阳
2023-03-14

我认为条件聚合可以实现这一点。

假设您不需要动态

Select ID = Col1
      ,FirstName   = max(case when Col2='FirstName'   then Col3 else null end)
      ,MiddleName  = max(case when Col2='MiddleName ' then Col3 else null end)
      ,LastName    = max(case when Col2='LastName '   then Col3 else null end)
      ,Height      = max(case when Col2='Height'      then Col3 else null end) 
      ,Weight      = max(case when Col2='Weight'      then Col3 else null end) 
 From YourTable
 Group By Col1

如果你需要动力

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([Col2]) From Yourtable  Order by 1 For XML Path('')),1,1,'') 
Select  @SQL = '
Select [Col1] as ID ,' + @SQL + '
From   YourTable
 Pivot (max(Col3) For [Col2] in (' + @SQL + ') ) p'
Exec(@SQL);

如果有帮助,动态Pivot的生成SQL如下:

Select [Col1] as ID ,[FirstName],[Height],[LastName],[MiddleName],[Weight]
From   YourTable
Pivot  (max(Col3) For [Col2] in ([FirstName],[Height],[LastName],[MiddleName],[Weight]) ) p
 类似资料:
  • 我有以下代码,希望使用Java8将列表转换为。 当我尝试将列表中的单个值映射为映射的键时,我得到了一个错误。

  • 我有以下Python数据帧: 我想:

  • 我尝试在中使用,但它将聚合函数作为参数,我不想提供。 我怎样才能做到这一点。

  • 我有这样的数据框 输出: . 输出: 我想分组的数据'ChannelPartnerID',因为我想合并数据的唯一值的唯一值在'ChannelPartnerID'和转换'品牌'列值为列包含销售价格为每一列 我希望它像这样输出:

  • 问题内容: 我是Python的新手,需要将列表转换为字典。我知道我们可以将元组列表转换为字典。 这是输入列表: 并且我想将此列表转换为元组列表(或直接转换为字典),如下所示: 我们如何在Python中轻松做到这一点? 问题答案: 您想一次将三个项目分组吗? 您想一次分组N个项目吗?

  • 我有一个这样的表,这个表中的所有用户只有两个特性 我想转换为