在 SQL Server 中,是否有人知道将多行数据合并/展平为仅包含不同非空值的尽可能少的行的好方法。
IE
像这样的数据集:
像这样:
如果有帮助,之前的数据集是一个旋转的行列表,但没有聚合。我无法在数据透视期间聚合它,因为我想保留每个不同的值而不是取 MAX 或 MIN。
我能想到的唯一方法是将数据拆分并将它们重新组合在一起,这不会很有效。
在 SQL Server 中,是否有人知道将多行数据合并/展平为仅包含不同非空值的尽可能少的行的好方法。
IE
像这样的数据集:
像这样:
如果有帮助,之前的数据集是一个旋转的行列表,但没有聚合。我无法在数据透视期间聚合它,因为我想保留每个不同的值而不是取 MAX 或 MIN。
我能想到的唯一方法是将数据拆分并将它们重新组合在一起,这不会很有效。
这里有几种方法,您可以通过为每列的每个非 NULL 值分配任意行号来处理任务(避免无关的排序,因为问题语句不需要有序数据),然后将结果数据转换为最终数据结果集。
创建测试数据
执行所需的合并和展平,每列扫描一次数据,最后一组行仅进行一次排序(或哈希组)
在 SQL Server 2017+ 中,执行所需的合并和展平,只需对数据进行一次扫描,无需排序
可视化测试数据
可视化结果
您的数据似乎在各个列值之间缺乏任何关系。如果您可以定义这种关系,您就可以
PIVOT
适当地处理数据。例如,如果您只是想根据值的顺序(基于您的默认排序规则)对齐数据,您可以使用: