2017-05-24 52 views
0

我被賦予了一個非常複雜的問題,我可能沒有專業知識來解決。我嘗試了很多不同的方法,但我還沒有接近解決這個問題。SQL - 根據兩行的派生值將兩行合併爲一個

我們有一個在名爲Lansweeper的應用程序中使用SQL Server的關係數據庫。我正在用兩張桌子工作。一個表格(tblAssets)包含我們的計算機清單數據,另一個表格(tblRegistry)包含這些計算機的註冊表數據。

我有一個要求查詢計算機名稱,驅動程序名稱和驅動程序版本全部成一行。但是,驅動程序版本和驅動程序名稱位於計算機上的兩個單獨的註冊表項中,導出版本和驅動程序的唯一方法是使用註冊表項值。

我在下面創建了一個簡單的查詢來開始。

Select Distinct Top 1000000 tblAssets.AssetName, 
    tblRegistry.Valuename, 
    tblRegistry.Value, 
    tblRegistry.Regkey 
From tblRegistry 
    Inner Join tblAssets On tblAssets.AssetID = tblRegistry.AssetID 
Where tblRegistry.Valuename Like '%Driver%' 
Order By tblRegistry.Regkey 

我提供了當前輸出和所需輸出的圖像。

Table Format

我覺得對我來說最大的路障現在的問題是如何處理在爲了做到這一點的派生密鑰位置值的值。我已經創建了row_number,pivot和union的變體,但是我真的不知道該怎麼做。

+0

不太清楚你想要什麼在這裏,但你所提供的查詢有一些語法問題開始:你至少應該包括「FROM tblRegistry」 – NiH

+0

嗨奧利,遺憾的混亂。這是我的錯誤。上面的簡單查詢已被編輯。 –

回答

0

您可以連接兩次tblRegistry,並在連接條件中包含'Valuename'。事情是這樣的:

SELECT DISCTINCT assets.AssetName ComputerName 
    , reg1.value Driver 
    , reg2.value DriverVersion 
    FROM tblAssets assets 
    JOIN tblRegistry reg1 
    ON reg1.AssetID = assets.AssetID 
    AND reg1.Valuename = 'DriverDesc' 
    JOIN tblRegistry reg2 
    ON reg2.AssetID = assets.AssetID 
    AND reg2.Valuename = 'DriverVersion' 
+0

哇,我認爲那是我們在大學裏學到的東西之一,我輕輕鬆鬆就知道了,因爲我沒有看到它的用處......直到現在! 我附加了一個where子句來獲得所需的結果:其中Reg1.Regkey = Reg2.Regkey –