Reputation: 17467
First SQL Query (Total Memroy)
SELECT
Nodes.NodeID AS NodeID, Nodes.TotalMemory AS TotalMemory, Nodes.Caption AS NodeName
FROM
(Nodes INNER JOIN Volumes ON (Nodes.NodeID = Volumes.NodeID))
Second SQL Query (Number of CPU on nodes)
SELECT N.Caption, COUNT(DISTINCT CPUIndex)
FROM CPUMultiLoad_Detail CPU WITH(NOLOCK)
JOIN Nodes N ON CPU.NodeID = N.NodeID
GROUP BY
N.Caption
Order By
N.Caption
I want to join first query and second query so i have both Total memory and Number of CPU on node in same table. How do i join both query? we can use common key Nodes.NodeID
to join but how?
Upvotes: 1
Views: 9464
Reputation: 251
SELECT t1.col2,t2.col3 FROM (SELECT NodeID col1,TotalMemory col2,Caption col3 FROM Nodes)t1 join
(SELECT NodeID col1,Caption col2,COUNT(DISTINCT CPUIndex) col3 FROM CPUMultiLoad_Detail CPU WITH(NOLOCK) GROUP BY Caption Order By Caption)t2 ON t1.col1=t2.col1
Upvotes: 0
Reputation: 70538
In the general case just use a join and a CTE
WITH PartOne AS
(
SELECT N.NodeID, COUNT(DISTINCT CPU.Index) as [Count]
FROM CPUMultiLoad_Detail CPU WITH(NOLOCK)
JOIN Nodes N ON CPU.NodeID = N.NodeID
GROUP BY N.Caption
)
SELECT Nodes.NodeID
Nodes.TotalMemory ,
Nodes.Caption AS NodeName,
PartOne.[Count]
FROM Nodes
INNER JOIN Volumes ON Nodes.NodeID = Volumes.NodeID
JOIN PartOne ON PartOne.NodeID = Nodes.NodeID
This particular case can also be done in one query like this:
SELECT Nodes.NodeID
Nodes.TotalMemory ,
Nodes.Caption AS NodeName,
COUNT(DISTINCT CPU.Index) OVER (PARTITION BY Nodes.Caption ORDER BY Nodes.Caption) AS [Count]
FROM Nodes
JOIN Volumes ON Nodes.NodeID = Volumes.NodeID
JOIN CPUMultiLoad_Detail CPU ON CPU.NodeID = Nodes.NodeID
Upvotes: 3
Reputation: 913
For the same situation i used the Temp Table
SELECT ..... FROM.... INTO #Temp1
GO
SELECT ..... FROM.... INTO #Temp2
GO
SELECT ..... FROM #Temp1, #Temp2 WHERE #Temp1.NodeID = #Temp2.NodeID
Remember to Drop the Temp Tables like This:
DROP Table #Temp1 DROP Table #Temp2
Upvotes: 1
Reputation: 7084
"With" comes in help to have a clean query:
WITH CPUOnNodes AS (
SELECT N.NodeID, N.Caption, COUNT(DISTINCT CPUIndex)
FROM CPUMultiLoad_Detail CPU WITH(NOLOCK)
JOIN Nodes N ON CPU.NodeID = N.NodeID
GROUP BY N.NodeID, N.Caption
Order By N.Caption
)
SELECT N.NodeID, N.TotalMemory, N.Caption NodeName
FROM Nodes N
INNER JOIN Volumes V ON N.NodeID = V.NodeID
INNER JOIN CPUOnNodes C ON N.NodeID = C.NodeID
Upvotes: 0