如何把SQL Server多行查询结果合并在一行中

嗯,是的,我们需要了解这个要求。
我们的表必须有一个字段来标识这个复合组键。
这样我们在查询时就可以正确拼写出想要的列名,如coltitle(admin1 ,admin2 )。
我当时很困惑,想了很久。

接下来我们需要使用SQL Server的pivot函数。
这个功能真的很强大,可以把行变成列。
我写了这样的示例代码:
选择站点 ID、站点名称、 [管理员1 ]、[管理员2 ] 通过临时枢轴 (([Admin1 ], [Admin2 ]) 中 AdminId 的 max(AdminName)) 像t
这段代码看起来有点复杂,但是执行起来效果很明显。
后来我意识到这个pivot函数可以将多个值转换为单个列,因此我们可以从Admin1 和Admin2 中获取所需的值。

我给你画一张最终效果的草图:
站点 ID |站点名称 |管理员1 |管理员2 -------------------------------------------------------- 1 2 3 | 1 2 3 站点A |张三|李斯 4 5 6 | 4 5 6 站点 B |王武|赵刘 ...
这样您就可以清楚地看到每个站点对应的管理员。
不过,我在这一点上可能有点极端,因为实际情况可能更复杂。

请教SQL server 中pivot的详细用法及语法规则

PIVOT 是一个用行代替列来简化数据显示的神器。

例如,2 02 2 年的销售数据将转向按产品类别划分的月度销售额。

语法简单,一行SQL即可完成,减少代码量。

UNPIVOT则相反,将行变成列,但是很难理解,代码也变长。

当我做自己的项目时,我更喜欢 PIVOT,因为它的效率。
称一下体重。

sql语句行转列函数 sql列转行函数

SQL Server 中经常使用 PIVOT 行到列转换函数。
举例来说,有带有日期、产品和销售信息的手表,对吧?使用 PIVOT,您可以将这些产品变成列,例如您在 1 月份销售了多少,在 2 月份销售了多少,以一个整洁的列表的形式显示。
必须配合CASE WHEN,否则行无法移至列。
我曾经创建一个报告,其中月份是列名,产品是行。
转账我用的是PIVOT,非常方便。

条件聚合也是可能的。
CASE WHEN 可以与 SUM 或 COUNT 结合使用。
例如,如果要查看每个产品的每月总销售额,可以先使用 GROUP BY 分隔组,然后使用 CASE WHEN 指定产品名称,最后添加 SUM。
无论使用哪种数据库(例如 Oracle 或 MySQL),这都有效。
我当时是在Oracle上做的。
写起来比PIVOT难一些,但是也可以实现。

UNPIVOT列到行转换函数也可以在SQL Server中使用。
相反,列会转换回行。
例如,如果您有一个表,一月销售额和二月销售额将成为一行,并且应该有两列:月份和销售额。
UNPIVOT 可以完成这项工作。

UNION ALL 更简单:只需连接多个 SELECT 结果。
例如,如果您选择一月销售额,然后选择二月销售额并使用 UNION ALL 将它们连接起来,它们将成为行。
无论哪个数据库使用起来最直观,这都有效。

PostgreSQL CROSS JOIN 或 UNNEST 更高级,专门处理数组或 JSON。
例如,如果您有一个包含一组数据的 JSON 数组,则可以使用 UNNEST 将其转换为字符串。
我在 PostgreSQL 上尝试过,JSON 确实很容易处理。

注意。
行转换为列时,必须保证源数据固定,否则转换不正确。
例如,如果您的产品名称发生更改,PIVOT 可能无法正确转换。
因此数据结构必须稳定。
而且,不同的数据库有不同的支持。
例如,Oracle不支持PIVOT,只能使用条件聚合。
所以这取决于你使用什么数据库。
性能也是一个问题。
如果传输大量数据,有时会很慢,需要优化。
当我传输数万条数据时,处理器爆炸了。
我后来添加了索引以加快该过程。