1
1
不,在SQL中,不能根据在同一查询中找到的数据动态推断列。 即使使用Microsoft SQL Server中的透视功能,编写查询时也必须知道列,并且必须对它们进行硬编码。 为了避免以关系正常形式存储数据,您必须做很多工作。 |
2
0
好吧,我找到了一种方法来完成我所追求的。系上安全带,这会变得颠簸。 因此,基本的问题是采用一个带有两种分隔符的字符串:条目和值。每个条目代表一组值,我想将字符串转换为一个表,每个条目对应一列值。我试图将其设置为UDF,但是临时表和动态SQL的必要性意味着它必须是一个存储过程。
所以这只是基本设置,建立临时表来保存我的中间结果。
那块漂亮的SQL来自 SQL Server Central's Forums 它是一个伟大的10000行计数表,非常适合分割字符串。
好的,这是第一个非常密集的肉。内部select使用guru的字符串拆分方法,沿着项目分隔符(逗号)拆分字符串。然后,该表被传递给执行相同操作的外部select,但这次使用值分隔符(冒号)将其传递给每一行。内部行数(entryID)和分区上的外部行数(rank)是透视的关键。entryid显示值属于哪个项目,rank显示值的顺序。
最后,动态SQL使之成为可能。通过获得不同列的列表,我们建立了列列表。然后将其写入动态轴,动态轴将值倾斜并将每个值插入适当的列中,每个列都有一个通用的“值”标题。
因此,通过呼叫
无论如何,希望这能帮助任何有类似问题的人。 (是的,它可能也可以用类似sqlcr的方法完成,但是我发现用纯SQL解决问题是一种极大的乐趣。) |
3
0
虽然可能不是最佳的,但这里有一个更浓缩的解决方案。
|
4
0
希望还不算太晚。 您可以使用“功能等级”来了解每对物品的位置。然后使用Pivot
|
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
hud · 执行存储过程会导致错误 8 年前 |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |