需要根据表中的唯一值将一列分解为多列?
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
的最大值,其中column5
是val1
/ val2
/ val3
。假设只有一个这样的匹配,它会选择一个匹配值。
【讨论】:
以上是关于需要根据表中的唯一值将一列分解为多列?的主要内容,如果未能解决你的问题,请参考以下文章