【发布时间】:2019-11-29 13:20:09
【问题描述】:
我已经在 StackOverflow 链接上发现了一个问题:- SQL Server 2008 Specified column was specified multiple times 但对我帮助不大。
以下代码引发异常。我该如何解决这个问题?
--Calculating the average true range---------
WITH cteRange AS
(
SELECT
t.[Date],
ROUND(t.[BID_High] - t.[BID_Low], 5) AS [H-L],
ABS(ROUND(t.[BID_High] - t.[BID_Close], 5)) AS [H-Cp],
ABS(ROUND(t.[BID_Low] - t.[BID_Close], 5)) AS [L-Cp]
FROM
(SELECT
*,
[BID_Close] = LAG([BID_Close]) OVER (ORDER BY [Date])
FROM
[STOCK_DATA_FOR_ANALYSIS]) AS t
), cteTrueRange AS
(
SELECT *
FROM cteRange
CROSS APPLY (
SELECT MAX(v) AS v
FROM (VALUES ([H-L]), ([H-Cp]), ([L-Cp])) AS value(v)
) AS sub([TR])
), cteTrueRange10 AS
(
SELECT
*,
LAG([TR], 1) OVER (ORDER BY [Date]) AS [TR1],
LAG([TR], 2) OVER (ORDER BY [Date]) AS [TR2],
LAG([TR], 3) OVER (ORDER BY [Date]) AS [TR3],
LAG([TR], 4) OVER (ORDER BY [Date]) AS [TR4],
LAG([TR], 5) OVER (ORDER BY [Date]) AS [TR5],
LAG([TR], 6) OVER (ORDER BY [Date]) AS [TR6],
LAG([TR], 7) OVER (ORDER BY [Date]) AS [TR7],
LAG([TR], 8) OVER (ORDER BY [Date]) AS [TR8],
LAG([TR], 9) OVER (ORDER BY [Date]) AS [TR9]
FROM cteTrueRange
)
SELECT
[Date], [H-L], [H-Cp], [L-Cp], [TR], [TRA]
FROM
cteTrueRange10
CROSS APPLY
(SELECT CASE WHEN [TR9] IS NOT NULL THEN AVG(v) END AS v
FROM (VALUES ([TR]), ([TR1]), ([TR2]), ([TR3]), ([TR4]), ([TR5]), ([TR6]), ([TR7]), ([TR8]), ([TR9])) AS value(v)
) AS sub([TRA]);
错误:
消息 8156,第 16 级,状态 1,第 17 行
为“t”多次指定了“BID_Close”列。
【问题讨论】:
-
这里只定义哪一列属于哪个CTE-SELECT [Date], [HL], [H-Cp], [L-Cp], [TR], [TRA]....像 cteRange.[HL]...
-
@mkRabbani 抱歉,我听不懂你在说什么。我在 cteRange 中遇到了一个例外,我使用 t 作为别名
-
你有 - “SELECT *, [BID_Close]....”。我猜它指定了两次。一个来自“SELECT *”,另一个是您定义的。出于测试目的,您可以尝试将 [BID_Close] 命名为 [BID_Close_test] 的不同名称。
-
@mkRabbani 所以你说我必须写 SELECT *, [BID_Close] AS [BID_CLOSE-TEST] = LAG([BID_Close]) OVER (ORDER BY [Date])
-
SELECT *, [BID_CLOSE-TEST] = LAG([BID_Close]) OVER (ORDER BY [Date])
标签: sql sql-server sql-server-2012