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

Tsql 在临时表/变量中:将多行连接到只有一行的表,tsql,select,join,insert,temp,Tsql,Select,Join,Insert,Temp,嗨, 我有一个小问题,就是如何将一个临时变量与一个临时表连接起来。任何意见都将不胜感激。我按照我试图解决问题的顺序提出问题 首先,我有一个临时变量,它是从select语句创建的。 变量@enhet在我的测试文件中有2行/观察值,以后会更多: declare @enhet varchar(50) SELECT @enhet = A.[EnhetsId] FROM [StatistikinlamningDataSKL].[dbo].[StatusHistorik] A inner jo

嗨, 我有一个小问题,就是如何将一个临时变量与一个临时表连接起来。任何意见都将不胜感激。我按照我试图解决问题的顺序提出问题

首先,我有一个临时变量,它是从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
问题是,当我运行脚本时,输出只有一行,只有@enhet变量的最后一个观察值

有人知道该怎么做吗?我尝试过很多方法,但由于我是SQL新手,所以未能编写正确的脚本。谁能给我指出正确的方向吗

提前感谢并致以最良好的问候! :

使用a保存第一个联接查询的结果:

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;

变量@enhet没有2行/观察值-它是一个标量变量,只能保存1个值。您可以通过在第一段代码末尾添加SELECT@enhet进行验证。谢谢您的回答。我从未想过查看SELECT@enhet,因为我在添加@enhet=string之前查看了输出。这就是为什么我没有看到这个问题。你对如何使它工作有什么建议吗?我已经尝试将第一个语句@enhet作为一个表而不是一个标量变量,但仍然无法找到连接两个临时表的正确脚本。感谢Reband先生的代码,它工作得非常好您知道如何在with**select..-语句的顶部添加更多条件吗?我需要添加一个存储过程,给定一个特定的条件,我希望插入@temp2执行。不确定你的意思-你可以将整个代码块封装在一个存储过程中。什么是“特定条件”?我不想更改存储过程中的任何内容,因为其他程序依赖于它们,但我想添加一个条件,即如果我希望在上述代码中执行的SP的输出为0,则继续执行insert语句insert into@temp2.Ok,我建议为该请求提交一个新的堆栈溢出问题-有几种方法可以实现这一点,但没有一种方法会正确地隐藏在这里的评论中。实际上,我刚刚完成了,我想让你看看,这里是:谢谢你的帮助!