sql行转列函数mysql行列转换最简单的方法

行到列的转换是常见的要求。
MySQL是使用CASE WHEN来实现的。
SQL Server 和 Oracle 使用 PIVOT。

例如,用户推荐表。
有用户名数据、状态和人数。

实时查看数据。
每个用户多条线路和分散的状态。

行转换为列后,每个用户状态都放在一列中。
便于比较分析。

你认为这直观吗?

sql语句怎么把列变成行

这是一个陷阱,表设计复杂且容易出错。

一张收款表,SQL数据横列变竖列

哎呀,你的 SQL 太复杂了。
我当时在一家小公司从事一个项目。
当时是SQL Server 2 005 ,数据表结构是一样的。
让我来帮助你弄清楚如何写它。

去年在苏州,我们有一个项目需要做报告。
老板要求将每个学生每科的成绩按照教学大纲进行相加和汇总。
你这样写其实是可以完成任务的,但是我看了几遍,发现有点复杂。

你的中间部分, SELECT isnull(SUM(case b.course WHEN '''' + course + '''') THEN ISNULL(b.grade, 0) end), 0) FROM DDTB WHERE b.名称 = T.B. 的团体名称姓名、B. 持续时间。
每当我看到这种类型的嵌套查询时,我就开始头疼。
我们当时的老技术写SQL的时候喜欢用嵌套,调试了三天。

想一想,能不能简化一点?例如,使用临时表或表变量首先将每个学生在每个科目的分数相加,然后进行汇总。
当我在另一个项目中遇到类似的需求时,我使用了表变量,代码开始看起来更加干净。

但是,在这个SQL Server 2 005 环境中有时会存在很多限制。
你的写法在2 005 年工作得很好,但在新版本中可能需要调整。

你敢尝试使用表变量吗?或者,如果您确信这种写作方式没问题,请继续使用它。
不管怎样,只要代码运行顺利,老板就满意了。
不过,如果以后遇到类似的问题,我建议你多考虑一下简化的解决方案,代码会容易维护很多。

哦,对了,你的声明@sql varchar(8 000),我写SQL的时候很少用到这种动态SQL,除非特别复杂。
您确定需要使用长度 8 000 吗?如果数据量不大,3 000条可能就够了。

总之,你的写法如果能顺利运行就好了,但有机会的话我建议你尽量简化。
代码看起来很舒服并且将来很容易更改。