SQL - 根据两行的派生值将两行合二为一
SQL - Combine Two Rows Into One, Based Upon a Derived Value of Both Rows
我遇到了一个非常复杂的问题,我可能没有专业知识来解决。我尝试了很多不同的方法,但我还没有接近解决这个问题。
我们在名为 Lansweeper 的应用程序中使用 SQL 服务器建立了一个关系数据库。我正在使用两个 table。一个 table (tblAssets
) 存放我们的计算机清单数据,另一个 table (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
我提供了当前输出和所需输出的图像。
我认为目前对我来说最大的障碍是如何处理派生键位置值的值以实现此目的。我已经创建了 row_number、pivot 和 union 的变体,但我真的不知所措。
您可以加入 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'
我遇到了一个非常复杂的问题,我可能没有专业知识来解决。我尝试了很多不同的方法,但我还没有接近解决这个问题。
我们在名为 Lansweeper 的应用程序中使用 SQL 服务器建立了一个关系数据库。我正在使用两个 table。一个 table (tblAssets
) 存放我们的计算机清单数据,另一个 table (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
我提供了当前输出和所需输出的图像。
我认为目前对我来说最大的障碍是如何处理派生键位置值的值以实现此目的。我已经创建了 row_number、pivot 和 union 的变体,但我真的不知所措。
您可以加入 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'