SQL技术问询:如何按Foreign ID分组并将Type列值转为新列
实现SQL行转列:按Foreign ID分组并将Type值转为新列
这是典型的行转列需求,最通用的实现方式是用条件聚合,几乎所有主流SQL数据库(MySQL、PostgreSQL、SQL Server等)都支持,非常适合新手上手。
假设你的表名为your_table,可以用以下SQL语句实现:
SELECT "Foreign ID", MAX(CASE WHEN Type = 'X' THEN Value END) AS X, MAX(CASE WHEN Type = 'Y' THEN Value END) AS Y FROM your_table GROUP BY "Foreign ID";
代码说明:
GROUP BY "Foreign ID":按Foreign ID分组,确保每个ID只输出一行CASE WHEN Type = 'X' THEN Value END:当Type为'X'时取出对应的Value,否则返回NULLMAX()(或SUM()):聚合函数用来过滤掉NULL值,因为每个分组里每个Type只会有一个有效Value,MAX/SUM都能得到正确的结果
如果你的数据库支持PIVOT语法(比如SQL Server、Oracle),也可以用更简洁的写法,但条件聚合的兼容性更强,适合新手优先掌握。
执行后会得到你期望的输出:
| Foreign ID | X | Y |
|---|---|---|
| 1 | 10 | 20 |
| 2 | 30 | 40 |
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

