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

如何将行转换为列?[复制]

宿嘉
2023-03-14

我有一个这样的表,这个表中的所有用户只有两个特性

+-------+---------+-----------+----------+
| User  | Feature | StartDate | EndDate  |
+-------+---------+-----------+----------+
| Peter |   F1    | 2015/1/1  | 2015/2/1 |
| Peter |   F2    | 2015/3/1  | 2015/4/1 |
| John  |   F1    | 2015/5/1  | 2015/6/1 |
| John  |   F2    | 2015/7/1  | 2015/8/1 |
+-------+---------+-----------+----------+

我想转换为

+-------+--------------+------------+--------------+------------+
| User  | F1_StartDate | F1_EndDate | F2_StartDate | F2_EndDate |
+-------+--------------+------------+--------------+------------+
| Peter |   2015/1/1   |  2015/2/1  |   2015/3/1   |  2015/4/1  |
| John  |   2015/5/1   |  2015/6/1  |   2015/7/1   |  2015/8/1  |
+-------+--------------+------------+--------------+------------+

共有3个答案

贺正祥
2023-03-14

这是对CTE的一点攻击:

;WITH CTE AS (
SELECT [User], [Feature] + '_StartDate' AS [Type], StartDate AS [Date]
FROM Table1
UNION ALL
SELECT [User], [Feature] + '_EndDate' AS [Type], EndDate AS [Date]
FROM Table1)
SELECT * FROM CTE
PIVOT(MAX([Date]) FOR [Type] IN ([F1_StartDate],[F2_StartDate], [F1_EndDate], [F2_EndDate])) PIV
葛飞扬
2023-03-14

执行此类操作的最佳通用方法是一个简单的group by语句。这应该适用于所有主要的ODBMS:

select user,
       max(case when feature='F1' then StartDate else null end) F1_StartDate,
       max(case when feature='F1' then EndDate else null end) F1_EndDate,
       max(case when feature='F2' then StartDate else null end) F2_StartDate,
       max(case when feature='F2' then EndDate else null end) F2_EndDate
    from table 
    group by user

注意:正如评论中提到的,这通常是不好的做法,因为根据您的需要,它会使数据更难处理。但是,当您的值数量很少且有限时,在某些情况下它是有意义的。

裴心水
2023-03-14

如果您正在使用SQL Server 2005或更高版本,您需要的是PIVOT。

 类似资料:
  • 我有一张如下的桌子: 如何将其转换为:

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

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

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

  • 我是数据科学的初学者,我正在尝试使用Pandas来旋转此数据框架: 所以它变成这样:(标签应该变成列,文件路径变成行。) “标签”列是一组或一类文件路径。我想把它转换成这样一种方式,它适合这个函数:tf。Keras.preprocessing.image.flow_from_dataframe 提前感谢所有帮助我的人。

  • 我有以下代码,希望使用Java8将列表转换为。 当我尝试将列表中的单个值映射为映射的键时,我得到了一个错误。