我想在SQL中创建一个视图,因为tableau软件不支持CTE功能。我在使用MAXRECURSION时无法添加视图。错误消息是
关键字' OPTION'附近的语法不正确。
以下是我现有的使用递归的CTE查询。
在现有查询中需要添加的位置和内容?
WITH shiftHours AS (
-- This is a recursive CTE, code removed to improve readability
)
SELECT *
FROM (
SELECT * from shiftHours
) AS t
PIVOT (
SUM(hourValue)
FOR hourOrdinal IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23])
) AS pvt
OPTION (MAXRECURSION 0)
GO
答案 0 :(得分:0)
每个查询只能使用一次OPTION。 您必须在查询中使用OPTION来使用您的视图。
答案 1 :(得分:0)
虽然您无法创建明确包含OPTION子句的VIEW,但如果您的CTE预计会返回超过100个预期结果,并且希望避免必须将OPTION语句添加到在您的VIEW调用中,尝试在VIEW中的OPENQUERY语句中执行CTE(包括OPTION子句)。
在您的示例中,它可能看起来像这样:
select * from OPENQUERY([YourDatabaseServer], '
WITH shiftHours AS (
-- This is a recursive CTE, code removed to improve readability
)
SELECT *
FROM (
SELECT * from YourDatabase.YourUser.shiftHours
) AS t
PIVOT (
SUM(hourValue)
FOR hourOrdinal IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23])
) AS pvt
OPTION (MAXRECURSION 0)
')x
请注意,您必须完全限定对象引用,即数据库和用户规范必须在对象(table,view,sproc或function)引用前添加前缀。
当然,它有点难看,但很好地完成了工作,并且避免了必须添加那个讨厌的OPTION条款。
答案 2 :(得分:-3)
Create View [dbo].[YourViewname] as
//Your CTE
go
这不应该有任何挑战。你面对任何人吗?