我有一个看起来像这样的表:
Month Site Val 2009-12 Microsoft 10 2009-11 Microsoft 12 2009-10 Microsoft 13 2009-12 Google 20 2009-11 Google 21 2009-10 Google 22
我想获得一个二维表,该表为我提供每个站点月份的“ Val”,例如:
Month Microsoft Google 2009-12 10 20 2009-11 12 21 2009-10 13 22
但是要注意的是,我不知道“站点”中所有可能的值。如果出现一个新站点,我想在结果表中自动获得一个新列。
我看到的所有可以做到这一点的代码示例都要求我在查询文本中对“ Microsoft and Google”进行硬编码。 我看到了一个没有,但是基本上是通过列出站点并在其中生成带有这些列名称的查询(连接字符串)来伪造它。
没有这样的黑客,没有办法让SQL Server 2008做到这一点吗?
注意:我需要能够将其作为从ASP.Net发送的查询来运行,我无法执行存储过程或类似的其他工作。
谢谢! 丹尼尔
您链接到的示例使用动态SQL。不幸的是,当事先不知道输出列时,没有其他内置方法可以在SQL Server中进行透视。
如果数据不是太大,则可能最简单的是简单地从ASP.NET运行普通的行查询并在应用程序代码中执行数据透视。如果数据非常大,则必须在首先查询可能的列值之后动态生成SQL。
请注意,您实际上不需要编写生成动态SQL的SQL语句。您可以简单地在ASP.NET中生成SQL,这很可能会容易得多。只是不要忘记Site在生成的查询中将它们分开之前先转义不同的值,也不要忘记对SQL语句的任何部分进行参数化,而这些部分通常是您无需数据透视表即可实现的。
Site