SQL垂直创建记录



如何在SQL中查询:

三年级600

您正在寻找一个非枢轴操作。一个简单的方法是使用UNION ALL:

SELECT Name, Year1 AS YearX, 1 AS position FROM yourTable UNION ALL
SELECT Name, Year2, 2 FROM yourTable UNION ALL
SELECT Name, Year3, 3 FROM yourTable
ORDER BY position;

在SQL Server中,我强烈建议使用APPLY来取消旋转:

select t.name, v.yearx
from t cross apply
(values (year1, 1), (year2, 2), (year3, 3)
) v(yearx, which);

注意如果要保留原来的列,可以选择第二列which

为什么我推荐这个而不是union all?当然,写起来更短。

更重要的是,它只引用原始表一次,因此表只被扫描一次。这是表上的一个边际性能增益。如果"表格"是";真的是一个视图或CTE

最新更新