当前位置: 首页 > 面试题库 >

SQL Server Pivot是否可以不知道结果列名称?

马泓
2023-03-14
问题内容

我有一个看起来像这样的表:

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语句的任何部分进行参数化,而这些部分通常是您无需数据透视表即可实现的。



 类似资料:
  • 问题内容: 是否可以 不 尝试加载就知道是否已加载Java类?尝试加载该类,但我不希望出现这种副作用。还有另一种方法吗? (我不想覆盖类加载器。我正在寻找一个相对简单的方法。) 问题答案: (感谢Aleksi)此代码: 产生: 请注意,示例类不在软件包中。完整的二进制名称是必需的。 二进制名称的一个示例是

  • 问题内容: 每次我运行使用Flask-SQLAlchemy的应用程序时,都会收到以下警告,提示该SQLALCHEMY_TRACK_MODIFICATIONS选项将被禁用。 我试图找出此选项的作用,但是Flask-SQLAlchemy文档尚不清楚该跟踪的用途。 · 如果设置为True(默认值),Flask-SQLAlchemy将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。

  • 问题内容: Hibernate API是否以List以外的集合形式支持对象结果集? 例如,我有运行数十万次迭代的过程,以便为客户端创建一些数据。该过程使用“值”表中的记录(例如),以便为每次迭代创建此输出。 对于列表,我必须遍历整个列表才能找到某个值,这很昂贵。我希望能够返回TreeMap并以编程方式指定键,以便我可以在集合中搜索所需的特定值。Hibernate可以帮我吗? 问题答案: 我假设您是

  • 是否可以使用“可更新”的jdbc结果集更新SQLServer数据库中的几何体列? 我尝试了updateString()和updateObject()方法,但都没有成功。例如: 抛出异常: 我还没找到这个错误的含义。我需要逃离某些角色吗?允许我将函数作为字符串传递吗?或者我应该使用不同的更新方法,比如updateBlob()或UpdateCharacterStream()? 顺便说一句,我可以用事先

  • 问题内容: 这是我的代码示例: 是否可以使用我的paxkage(bio)中的函数而无需指定包名称: ? 问题答案: 您可以将其用作导入声明,例如: 如果出现显式的句号()而不是名称,则在该软件包的package块中声明的所有软件包导出的标识符都将在导入源文件的file块中声明,并且 必须在不使用限定符的情况下进行访问 。 这就是像govey这样的测试框架所做的: 您不需要使用,或者由于导入以’开头

  • 问题内容: SQLite的列名是否有任何规则? 可以使用’/’之类的字符吗? 可以是UTF-8吗? 问题答案: 包含完整列表的http://www.sqlite.org/lang_keywords.html!请享用!