Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中使用嵌套select语句有困难_Sql_Sql Server Config Manager - Fatal编程技术网

在SQL中使用嵌套select语句有困难

在SQL中使用嵌套select语句有困难,sql,sql-server-config-manager,Sql,Sql Server Config Manager,我正在尝试创建一个ConfigMgr报告,该报告将显示我们环境中每个笔记本电脑的3个注册表项值。我的查询如下所示: Select distinct SYS.Netbios_Name0, (Select REG.Value0 where REG.KeyPath0='HKEY_LOCAL_MACHINE\SOFTWARE\BatteryDesignCapacity' ) as BatteryDesignCapacity, (Select REG.Value0 where REG.KeyPath0=

我正在尝试创建一个ConfigMgr报告,该报告将显示我们环境中每个笔记本电脑的3个注册表项值。我的查询如下所示:

Select distinct

SYS.Netbios_Name0,
(Select REG.Value0 where REG.KeyPath0='HKEY_LOCAL_MACHINE\SOFTWARE\BatteryDesignCapacity' ) as BatteryDesignCapacity,
(Select REG.Value0 where REG.KeyPath0='HKEY_LOCAL_MACHINE\SOFTWARE\BatteryFullChargedCapacity' ) as BatteryFullChargedCapacity,
(Select REG.Value0 where REG.KeyPath0='HKEY_LOCAL_MACHINE\SOFTWARE\BatteryHealth' ) as BatteryHealth

from v_GS_Registry_Values0 REG

INNER JOIN v_R_System_Valid SYS
ON SYS.ResourceID = REG.ResourceID

ORDER BY SYS.Netbios_Name0
然而,当我运行该报告时,每个笔记本电脑名称对应4行。一行包含笔记本电脑名称和所有空白注册表值,下一行仅包含BatteryDesignCapacity值,第三行仅包含BatteryFullChargedCapacity,第四行仅包含BatteryHealth


我做错了什么?是否可以通过修改select语句将所有4个注册表值放在一行中?

似乎每台计算机都有多行注册表值0。 您可以试试这个,或者使用SQLPivot函数

SELECT  DISTINCT
        SYS.Netbios_Name0
        ,MAX(   CASE
                    WHEN REG.KeyPath0 = 'HKEY_LOCAL_MACHINE\SOFTWARE\BatteryDesignCapacity' THEN REG.Value0
                END
            ) AS BatteryDesignCapacity
        ,MAX(   CASE
                    WHEN REG.KeyPath0 = 'HKEY_LOCAL_MACHINE\SOFTWARE\BatteryFullChargedCapacity' THEN REG.Value0
                END
            ) AS BatteryFullChargedCapacity
        ,MAX(   CASE
                    WHEN REG.KeyPath0 = 'HKEY_LOCAL_MACHINE\SOFTWARE\BatteryHealth' THEN REG.Value0
                END
            ) AS BatteryHealth
FROM    v_GS_Registry_Values0 AS REG
        INNER JOIN v_R_System_Valid AS SYS ON SYS.ResourceID = REG.ResourceID
GROUP BY
        SYS.Netbios_Name0;

我认为您需要条件聚合:

SELECT SYS.Netbios_Name0,
       MAX(CASE WHEN REG.KeyPath0 = 'HKEY_LOCAL_MACHINE\SOFTWARE\BatteryDesignCapacity' THEN REG.Value0  END) as BatteryDesignCapacity,
       MAX(CASE WHEN REG.KeyPath0 = 'HKEY_LOCAL_MACHINE\SOFTWARE\BatteryFullChargedCapacity' THEN REG.Value0 END) as BatteryFullChargedCapacity,
       MAX(CASE WHEN REG.KeyPath0 ='HKEY_LOCAL_MACHINE\SOFTWARE\BatteryHealth' THEN REG.Value0 END) as BatteryHealth
FROM v_GS_Registry_Values0 REG INNER JOIN
     v_R_System_Valid SYS
     ON SYS.ResourceID = REG.ResourceID
GROUP BY SYS.Netbios_Name0
ORDER BY SYS.Netbios_Name0