在临时表/变量中:将多行连接到表,只有一行

时间:2013-11-15 17:07:13

标签: tsql select join insert temp

您好, 我有一个小问题,即使用临时表加入临时变量。任何输入都将非常感激。我按照我试图解决它的顺序提出问题。

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

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-variable的最后一个观察值。

有谁知道该怎么办?我尝试了很多东西,但由于我是SQL的新手,因此无法编写正确的脚本。有人能指出我正确的方向吗?

提前致谢和最诚挚的问候! :)

1 个答案:

答案 0 :(得分: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;