我正在寻找从行集上的子选择查询中检索值,其中我只需要来自主查询的当前行的值(SQL Server版本2005-2012已显示相同的行为)。我写了一个子选择查询,它返回多行( HOW ,我在主键上匹配?!)
以下示例代码说明了我要完成的任务:
CREATE TABLE [dbo].[TestTable]
(
[TestID] [int] IDENTITY(1,1) NOT NULL,
[TestValue] [nvarchar](255) NULL,
[TestValue2] [nvarchar](255) NULL,
[TestValue3] [nvarchar](255) NULL,
[TestValue4] [nvarchar](255) NULL,
PRIMARY KEY CLUSTERED ([TestID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '56789', '98765', '43210')
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '98765', '56789', '43210')
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '43210', '56789' ,'98765')
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '98765', '43210', '56789')
GO
SELECT TOP 1000
[TestID]
,[TestValue]
,[TestValue2]
,[TestValue3]
,(SELECT TestValue + TestValue2 AS CompositeValue
FROM [TESTDB].[dbo].TestTable AS foo
WHERE foo.TestID = TestID)
FROM
[TESTDB].[dbo].[TestTable]
返回错误是:
Msg 512,Level 16,State 1,Line 2
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
如果您可以提供另一种执行此查询的方法 - 即使用ROW_NUMBER或其他一些方法(不对临时表执行选择,也不声明单个变量)。
提前致谢!
答案 0 :(得分:1)
尝试对基表进行别名
SELECT TOP 1000 [TestID]
,[TestValue]
,[TestValue2]
,[TestValue3]
,(SELECT foo.TestValue + foo.TestValue2 FROM [TESTDB].[dbo].TestTable AS foo WHERE foo.TestID=B.TestID) AS CompositeValue
FROM [TESTDB].[dbo].[TestTable] AS B