我需要幫助將兩個查詢組合在一起,這些查詢將不同的結果合并到一個功能查詢中。
use DBname
select tblComputer.HostName,
tblComputer.Manufacturer,
tblComputer.Model,
tblComputerHardware.ProcessorType,
tblComputerHardware.ProcessorCount,
tblComputerHardware.CoreCount,
tblInstances.InstanceName
from tblDatabases
JOIN tblComputer ON tblDatabases.ComputerID=tblComputer.ComputerID
join tblComputerHardware ON tblComputer.ComputerID=tblComputerHardware.ComputerID
join tblInstances ON tblComputer.ComputerID=tblInstances.ComputerID
where IsVirtual=0
所以這個查詢給出了我從幾個表中定義的結果。現在我想再添加一列,其中我將在每臺計算機上安裝實體。請注意,一臺計算機上有多個實體,我需要用“,”分隔這些實體。我發現這個查詢對我有用
select tblInstances = STUFF((
select ',' InstanceName
from tblInstances
for xml path ('')
), 1, 1, '')
但是我一直在努力研究如何將這兩個查詢合并為一個,以便我能夠在每臺計算機上看到多個用逗號分隔的實體。
我希望得到你們的幫助,我希望你們能理解我的問題。
uj5u.com熱心網友回復:
您需要使用橫向子查詢。我假設FOR XML PATH您是有意使用的,因為您使用的是 SQL Server 2016 或更早版本,因此也使用了它。如果您在 2017 年,那么您可能想要研究STRING_AGG. 但是,我已切換到使用TYPEandtext()因為前者不會轉義特殊字符,而后者性能更高:
SELECT C.HostName,
C.Manufacturer,
C.Model,
CH.ProcessorType,
CH.ProcessorCount,
CH.CoreCount,
STUFF((SELECT ',' I.InstanceName
FROM tblInstances I
WHERE I.ComputerID = C.ComputerID
FOR XML PATH(''),TYPE).value('(./text())[1]','varchar(MAX)'),1,1,'') AS InstanceNames --Use nvarchar if needed
FROM tblDatabases D --Use Aliases, it makes your code far more succinct
JOIN tblComputer C ON D.ComputerID = C.ComputerID
JOIN tblComputerHardware CH ON C.ComputerID = CH.ComputerID
WHERE C.IsVirtual = 0; --Alias guessed
uj5u.com熱心網友回復:
你的意思是這樣?
select tblComputer.HostName,
tblComputer.Manufacturer,
tblComputer.Model,
tblComputerHardware.ProcessorType,
tblComputerHardware.ProcessorCount,
tblComputerHardware.CoreCount,
string_agg(tblInstances.InstanceName, ',') as Instances
from tblDatabases
JOIN tblComputer ON tblDatabases.ComputerID=tblComputer.ComputerID
join tblComputerHardware ON tblComputer.ComputerID=tblComputerHardware.ComputerID
join tblInstances ON tblComputer.ComputerID=tblInstances.ComputerID
where IsVirtual=0
group by tblComputer.HostName,
tblComputer.Manufacturer
tblComputer.Model,
tblComputerHardware.ProcessorType,
tblComputerHardware.ProcessorCount,
tblComputerHardware.CoreCount
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367518.html
標籤:sql sql-server
上一篇:合并SQL中的幾行
