【发布时间】:2016-06-09 18:48:35
【问题描述】:
我正在尝试使用对表的自引用在 SQL Server Management Studio 中添加计算列。
我的专栏如下:
[Employee ID] [Previous State Date] [Previous State]
[Next State Date] [Next State]
我想添加一个显示第三个状态的列(发生在 [Next State] 列之后)。例如,如果有人从状态 a -> b -> c 出发,就会有两行:
[Employee 1][1/1/2016][a][1/2/2016][b]
[Employee 1][1/2/2016][b][1/3/2016][c]
我希望只显示数据:
[Employee 1][1/1/2016][a][1/2/2016][b][c]
为此,我创建了两个列,[PreviousID] 和 [NextID],它们连接状态、日期和员工 ID。
我想使用临时表引入temp.[Next State] WHERE table.[Next State] = temp.[Previous State] 的新列
当我尝试这个时,我得到了错误:
在这种情况下不允许子查询。只允许使用标量表达式。
我的代码:
SELECT * INTO #temp FROM table
ALTER TABLE table
ADD [Next Next State] AS (SELECT [Next State]
FROM temp
WHERE table.[Next State] = temp.[Previous State])
【问题讨论】:
-
你能用你正在使用的 sql server 标记你的问题吗?另外,听起来您需要一个单独的状态表来管理这些状态。
-
已标记。我正在使用 SQL Server Management Studio 2012
-
你的基表有主键吗?
-
我猜你是 [Next State] 列是某种 varchar。检查这个simple-talk.com/sql/t-sql-programming/… 虽然我仍然认为检查你的表结构是更好的方法。如果您有一个只有 [EmployeeID][Date][State] 的表格,那么您将记录新的状态,它会更有效。
-
我以上述格式从外部源中提取数据。当我创建另一个仅包含状态的表时,尝试在计算列中引用子查询时,我仍然会遇到相同的错误
标签: sql tsql join sql-server-2012 temp-tables