【问题标题】:Joining a query result to a distinct dynamic query in SQL将查询结果连接到 SQL 中的不同动态查询
【发布时间】:2014-10-20 13:39:38
【问题描述】:

我整天都在尝试将单行的简单查询结果合并到另一个具有单行的动态查询。简要解释一下我所掌握的内容如下:

我有一个复杂的 SELECT 查询结果,它返回单行的两列:

HistoryDate |TotalMarketValue
2014-08-31   1195687865.20

然后我有另一个动态查询,它返回具有动态列数的单行,其中我不知道将返回的名称或列数,我执行如下操作:

exec sp_executesql @query

所以基本上我需要做的是:

SELECT HistoryDate, SUM(TotalMarketValue) FROM MyComplexTable, exec sp_executesql @query

显然上述语法是错误的,因为 exec 部分不允许我进行 CROSS JOIN。我尝试了各种其他方法,例如尝试将动态查询结果填充到临时表中,但同样它不允许我在不指定列数的情况下创建表。我只是错过了这一点。

有人可以告诉我如何将动态查询作为合并查询的一部分吗?

【问题讨论】:

  • 您可以更改@query,以便在sp_executesql 之前添加两个额外的列吗?
  • 非常感谢@StuartLC,只是想知道为什么我一整天都搞不清楚这个角度。显然,“TotalMarketValue”包含一个 SUM(函数),并给了我一些错误。不过,您的提示通过另外将动态列添加到 GROUP BY 子句,引导我找到解决方案。再一次非常感谢你...! :)

标签: sql sql-server aggregate-functions


【解决方案1】:

您可以使用表变量并将查询结果插入其中。然后从表变量中选择数据,并使用联合选择语句。

DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT HistoryDate, SUM(TotalMarketValue)'

DECLARE @Results TABLE(cola DATETIME, colb DECIMAL(18,2))

INSERT INTO @Results
exec sp_executesql @query

SELECT * FROM @Results
UNION 
SELECT HistoryDate, SUM(TotalMarketValue)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多