SQL Server : Combine several SELECT statements with "WITH" part into a UNION

标签 sql sql-server select union

我有几个这样的语句(使用WITH语句):

WITH valDiff AS (SELECT <ComplexClause1> AS v1 FROM [MyTable] WHERE <OtherClause1>) SELECT SUM(CASE WHEN v1 < @MaxVal THEN v1 ELSE @MaxVal END) FROM valDiff

UNION

WITH valDiff AS (SELECT <ComplexClauseN> AS v1 FROM [MyTable] WHERE <OtherClauseN>) SELECT SUM(CASE WHEN v1 < @MaxVal THEN v1 ELSE @MaxVal END) FROM valDiff

我需要将它们合并到一个联合中,以便“一口气”返回结果。这些语句本身工作得很好,但是如果我在它们之间添加单词“UNION”,就像我上面显示的那样,我会收到以下错误:

Incorrect syntax near the keyword 'UNION'.
Incorrect syntax near the keyword 'with'.
If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon."

我做错了什么?

最佳答案

WITH 将跨越 UNION 中的所有子句

;WITH valDiff AS 
(
whatever
) 
SELECT ... FROM valDiff ...
UNION ALL
SELECT ... FROM valDiff ...

每个子句中都有不同的 CTE(如本例所示):

;WITH CTE1 AS 
(
whatever
) , CTE2 AS
(
something
)
SELECT ... FROM CTE1 ...
UNION ALL
SELECT ... FROM CTE2 ...

关于SQL Server : Combine several SELECT statements with "WITH" part into a UNION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685882/

相关文章:

c# - 发布我的第一个应用程序 -> 权限被拒绝

sql - 只要后面没有非空值,就在组中查找空值的第一个实例 - Teradata SQL

sql - 在 SQL 中选择直到第二个下划线的子字符串

sql - 如何更新TOP 400?

sql - 如何在 MsSQL 中执行简单的 'Find and Replace"?

mysql - 如何在2个字符串中使用JOIN?

MYSQL组合 View 具有不同条目记录数的两个表

sql - 如何为以下结果创建 SQL 语句?

sql - 如何在 UNIONS 之间的 SQL 中放置 ORDER BY 子句

selenium - 如何使用 Selenium 从选择下拉列表中检索选项的值?