在表变量中插入多个select语句

时间:2015-12-03 22:59:39

标签: sql sql-server tsql join self-join

我需要从两列中选择值,但是在单独的行中,因此我首先尝试将它们插入到表变量中。

这两个插入语句可以正常工作。

idx

然而这无法解析

DECLARE @name TINYINT;SET @name = 21;
DECLARE @time DATETIME;SET @time = '2013-09-29';--30T00:15:00.000';
DECLARE @offset INT;SET @offset = 1;
DECLARE @fetch INT;SET @fetch = 3;

DECLARE @temp_c TABLE ([close] REAL);

INSERT INTO @temp_c 

    SELECT [Close]
    FROM [dataSQL].[dbo].[temperatures]
    WHERE [Time]<@time AND [cityID]=@name
    ORDER BY [Time] DESC
    OFFSET 0 ROWS  -- has no offset
    FETCH NEXT (@fetch) ROWS ONLY


SELECT * FROM @temp_c;

DECLARE @temp_h TABLE ([high] REAL);

INSERT INTO @temp_h  

SELECT [High] 
FROM [dataSQL].[dbo].[temperatures]
WHERE [Time]<@time AND [cityID]=@name
ORDER BY [Time] DESC
OFFSET (@offset) ROWS. -- has an offset
FETCH NEXT (@fetch) ROWS ONLY


SELECT * FROM @temp_h;

为什么呢?当我修改它并添加更多select语句时,我遇到了错误'子查询返回了多个结果'即使插入也不接受。

2 个答案:

答案 0 :(得分:0)

您的SQL无效。试试这个:

INSERT INTO @temp
SELECT 
    (SELECT [Close]
    FROM [dataSQL].[dbo].[temperatures]
    WHERE [Time]<@time AND [cityID]=@name
    ORDER BY [Time] DESC
    OFFSET 0 ROWS
    FETCH NEXT (@fetch) ROWS ONLY),

    (SELECT [High] 
    FROM [dataSQL].[dbo].[temperatures]
    WHERE [Time]<@time AND [cityID]=@name
    ORDER BY [Time] DESC
    OFFSET (@offset) ROWS
    FETCH NEXT (@fetch) ROWS ONLY)

答案 1 :(得分:0)

以下内容肯定会解析并运行,但最终结果可能不是您想要的。

DECLARE @temp TABLE ([close] REAL, [high] REAL);

INSERT INTO @temp ([close], [high])
SELECT [Close], [High]
FROM [dataSQL].[dbo].[temperatures]
WHERE [Time]<@time AND [cityID]=@name
ORDER BY [Time] DESC
OFFSET (@offset) ROWS
FETCH NEXT (@fetch) ROWS ONLY;

上面的查询会从表格的同一行中选择[Close][High]值。

如果您需要以某种方式组合来自不同行的值,请编辑问题并向我们解释所需的逻辑。