您好, 我有一个小问题,即使用临时表加入临时变量。任何输入都将非常感激。我按照我试图解决它的顺序提出问题。
首先,我有一个从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的新手,因此无法编写正确的脚本。有人能指出我正确的方向吗?
提前致谢和最诚挚的问候! :)
答案 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;