需要根据表中的唯一值将一列分解为多列?

Posted

技术标签:

【中文标题】需要根据表中的唯一值将一列分解为多列?【英文标题】:Need to decompose a column to multiple columns based on unique values in a table? 【发布时间】:2018-09-04 14:59:04 【问题描述】:

请帮助我用合适的方法在 Excel 和 SQL/Redshift 中执行此操作。

所以假设我有一个像这样的表:

我想将第 5 列分解为与该列中的唯一值一样多的列,并将第 6 列的相应值放入行中。基本上我只想要一行用于唯一的 [column1, column2, column3] 对。所以,我想要这样的结果:

【问题讨论】:

请不要链接到数据图像。请将数据复制到您的问题中并使用降价控件对其进行格式化。通过这种方式,我们可以看到问题上下文中的数据,输入和输出彼此相邻,并在必要时将数据复制到 SQL Fiddle 等应用程序中。另外,您是尝试在 Excel 中还是在 RedShift 中执行此操作? 【参考方案1】:

实现此目的的一种简单 SQL 方法是使用 MAX()CASE...

SELECT
  column1,
  column2,
  column3,
  column4,
  MAX(CASE WHEN column5 = 'val1' THEN column6 END)   AS val1,
  MAX(CASE WHEN column5 = 'val2' THEN column6 END)   AS val2,
  MAX(CASE WHEN column5 = 'val3' THEN column6 END)   AS val3
FROM
  yourTable
GROUP BY
  column1,
  column2,
  column3,
  column4

CASE 表达式中,如果第5 列不匹配,则CASE 的结果隐式为NULL

然后,在MAX() 中,任何NULL 值都会被有效地忽略。

这会导致组合选择column6 的最大值,其中column5val1 / val2 / val3。假设只有一个这样的匹配,它会选择一个匹配值。

【讨论】:

以上是关于需要根据表中的唯一值将一列分解为多列?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据另一列值将一列分成多个?

如何根据最大值和最小值将一组 SQL 记录转换为单行?

将一列拆分为多行

有没有办法根据 Python 中的一列或多列中具有相似值的行来选择表中的某些行?

使用python中的所有值将数据帧float转换为int

SQL 怎么将一列中的数据按一个分隔符分成多列显示