2013-11-15 31 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

相關問題