消息8156,级别16,状态1,行17为“ t”多次指定了“ BID_Close”列

极客

我已经在StackOverflow链接上发现此问题:-SQL Server 2008“指定”列被多次指定,但对我没有太大帮助。

以下代码引发异常。我怎样才能解决这个问题?

--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”列。

marc_s

问题在这里:

(SELECT 
     *, 
     [BID_Close]  = LAG([BID_Close]) OVER (ORDER BY [Date])
 FROM 
     [STOCK_DATA_FOR_ANALYSIS]) AS t 

STOCK_DATA_FOR_ANALYSIS表/视图似乎有一个名为的列BID_Close,该*您的SELECT语句中的选择。最重要的是,您还定义了一个别名为BID_Close(由that定义)的新列LAG(...)-因此,现在您选择的数据集中有两个列被调用BID_Close,这会导致错误。

您可以通过以下方法解决此问题:

  • *选择真正需要的BID_Close不是选择列):

    SELECT 
        (list of columns, except BID_Close),
        [BID_Close]  = LAG([BID_Close]) OVER (ORDER BY [Date])
    
  • 为该计算列定义一个不同的列别名,以[BID_Close_Last] = LAG([BID_Close]) OVER (ORDER BY [Date])使基础表BID_Close中的列为,而新计算的值称为BID_Close_Last

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为“ PVT”多次指定了“ 638”列。枢

为表多次指定了 xxx 列

为 'stat' 多次指定了列 '30'

列被多次指定

为“ P”多次指定了“ JUN-2015”列

为“ CTE_YYYY”多次指定了“ xxxx”列

实体框架为“ Filter1”多次指定了“ x”列

怎么修?消息 515,级别 16,状态 2,第 2 行无法将值 NULL 插入列,列不允许为空值。插入失败

错误:列>>?列?<<指定了多次

多次指定 SQL Server 列

VIEW定义中的“错误:列...指定了多次”

错误:“ owner_name”列指定了多次

错误:“ int4”列指定了多次

在 SET 子句 > 或 INSERT 的列列表中多次指定列名“userid”

消息207,级别16,状态1“无效的列名称'名称'”

在一个表上的简单选择查询上遇到消息8623,级别16,状态1,行1错误

消息512,级别16,状态1,过程trg_pricebase,行13子查询返回的值大于1

Taskkill:我需要多次指定 \t 参数吗?

消息241,级别16,状态1,第6行从字符串转换日期和/或时间时转换失败

消息 4145,级别 15,状态 1,第 5 行在“ucell”附近的预期条件的上下文中指定的非布尔类型的表达式

列名多次指定插入到具有 1 对 1 关系的实体中

尝试根据插入时间更新 SQL Server 中的列值并获取“列“ID”多次指定为“p””

T-SQL数据清理-当元组出现多次时,如果某些属性为NULL,则保留行

消息 33299,在 WHERE 子句中使用始终加密列时的级别 16

SQL Server 2014 错误:消息 7738,级别 16,状态 2

使用html表格为excel指定列宽和行高

根据状态将行分散为列。

如果列表值与列名相对应,如何将列值设置为1(由行索引指定)?

没有为“sp”的第 1 列指定列名