2013-11-15 30 views
2

嗨, 我有一个加入临时表的临时变量的小问题。任何输入将不胜感激。我按照试图解决问题的顺序提出问题。在临时表格/变量中:将多行连接到只有一行的表格

首先,我有一个从select语句创建的临时变量。 变量@enhet有两行/观测值(在我的测试文件中,以后就会有更多):

declare @enhet varchar(50) 

SELECT @enhet = 
    A.[EnhetsId] 
FROM [StatistikinlamningDataSKL].[dbo].[StatusHistorik] A 
inner join (
      select [EnhetsId], max(SenastUppdaterad) as SenastDatum 
      from [StatistikinlamningDataSKL].[dbo].[StatusHistorik] 
      group by [EnhetsId] 
      ) B 
on A.[EnhetsId] = B.[EnhetsId] and A.[SenastUppdaterad] = B.SenastDatum 
WHERE [NyStatus] = 4 

其次,我想创建一个临时表,这两个观测(1变量)相结合额外的变量对于变量@enhet的独特观察值都是相同的。目的是为变量@enhet设置一个具有唯一值的表格,但其余部分是相同的。

declare @temp2 table (
    EnhetsId varchar(50), 
    TjanstId Int, 
    Tabell varchar(50), 
    Kommentar ntext, 
    Uppdaterad datetime 
) 
insert into @temp2 (
    EnhetsId, TjanstId, Tabell, Kommentar, Uppdaterad) 
    values (
     @enhet, 1, 'GR_PS09_1', 'KLAR', getdate()) 

select * from @temp2 

的问题是,当我运行该脚本的输出只有1只来自@ enhet变量的最后一个观察一行。

有没有人知道该怎么办?我尝试了很多东西,但由于我是SQL新手,我没有写出正确的脚本。任何人都可以将我指向正确的方向吗?

在此先感谢和问候! :)

+0

变量'@ enhet'不具有2行/意见 - 这是一个标量,并且只能存储1值。您可以通过在您的第一个代码块末尾添加“SELECT @ enhet”来进行验证。 –

+0

感谢您的回答。我从来没有想过要查看SELECT @enhet,因为我在添加“@enhet =”字符串之前查看了输出。这就是为什么我没有看到问题。你有什么建议如何使它的工作?我已经尝试将第一个语句“@enhet”作为表格而不是(标量)变量,但仍然无法找出合适的脚本来合并两个临时表格。 – user2995808

回答

0

使用common table expression牵你初入查询的结果:

declare @temp2 table (
    EnhetsId varchar(50), 
    TjanstId Int, 
    Tabell varchar(50), 
    Kommentar ntext, 
    Uppdaterad datetime 
); 

WITH ENHET_CTE AS 
(
    SELECT A.[EnhetsId] 
    FROM [StatistikinlamningDataSKL].[dbo].[StatusHistorik] A 
    inner join (
      select [EnhetsId], max(SenastUppdaterad) as SenastDatum 
      from [StatistikinlamningDataSKL].[dbo].[StatusHistorik] 
      group by [EnhetsId] 
      ) B 
    on A.[EnhetsId] = B.[EnhetsId] and A.[SenastUppdaterad] = B.SenastDatum 
    WHERE [NyStatus] = 4 
) 

insert into @temp2 
    (EnhetsId, TjanstId, Tabell, Kommentar, Uppdaterad) 
SELECT 
    EnhetsId, 1, 'GR_PS09_1', 'KLAR', getdate() 
from ENHET_CTE; 

select * from @temp2; 
+0

感谢代码为mr.Reband,它工作完美。 :)你知道如何在**(select ..) - 语句之上添加更多条件吗?我需要添加一个存储过程,并给定一个特定的条件,我希望“插入到@ temp2”来执行。 – user2995808

+0

不确定你的意思 - 你可以将整个代码块封装在存储过程中。什么是“特定条件”? –

+0

我不想更改存储过程中的任何内容,因为其他程序依赖于它们,但是我想添加这样一个条件,即如果SP(我想在上面的代码中执行)的输出为“0 “然后继续使用insert语句(insert into @ temp2)。 – user2995808

相关问题