Reputation: 510
I am trying to connect records from two different tables so I can display the data in a tabular format in an SSRS tablix.
The code below does not return the expected results.
As is, for each item in Temp_A
the loop updates everything with the last item in Temp_C
. Here is the code:
CREATE TABLE #Temp_A
(
[ID] INT,
[Name] VARCHAR(255)
)
INSERT INTO #Temp_A ([ID], [Name])
VALUES (1, 'A'), (2, 'B')
CREATE TABLE #Temp_C
(
[ID] INT,
[Name] VARCHAR(255)
)
INSERT INTO #Temp_C ([ID], [Name])
VALUES (1, 'C'), (2, 'D')
CREATE TABLE #Temp_Main
(
[Temp_A_ID] INT,
[Temp_A_Name] VARCHAR(255),
[Temp_C_ID] INT,
[Temp_C_Name] VARCHAR(255),
)
DECLARE @MIN_AID int = (SELECT MIN(ID) FROM #Temp_A)
DECLARE @MAX_AID int = (SELECT MAX(ID) FROM #Temp_A)
DECLARE @MIN_DID int = (SELECT MIN(ID) FROM #Temp_C)
DECLARE @MAX_DID int = (SELECT MAX(ID) FROM #Temp_C)
WHILE @MIN_AID <= @MAX_AID
BEGIN
WHILE @MIN_DID <= @MAX_DID
BEGIN
INSERT INTO #Temp_Main([Temp_A_ID], [Temp_A_Name])
SELECT ID, [Name]
FROM #Temp_A
WHERE ID = @MIN_AID
UPDATE #Temp_Main
SET [Temp_C_ID] = ID, [Temp_C_Name] = [Name]
FROM #Temp_C
WHERE ID = @MIN_DID
SET @MIN_DID = @MIN_DID + 1
END
SET @MIN_AID = @MIN_AID + 1
SET @MIN_DID = 1
END
SELECT * FROM #Temp_Main
DROP TABLE #Temp_A
DROP TABLE #Temp_C
DROP TABLE #Temp_Main
Incorrect result:
Temp_A_ID | Temp_A_Name | Temp_C_ID | Temp_C_Name
----------+-------------+-----------+---------------
1 A 2 D
1 A 2 D
2 B 2 D
2 B 2 D
Expected results:
Temp_A_ID | Temp_A_Name | Temp_C_ID | Temp_C_Name
----------+-------------+-----------+---------------
1 A 1 C
1 A 2 D
2 B 1 C
2 B 2 D
What am I missing?
Upvotes: 0
Views: 28
Reputation: 1269603
You seem to want a cross join
:
select a.*, c.*
from #Temp_A a cross join
#Temp_C c
order by a.id, c.id;
Here is a db<>fiddle.
There is no need to write a WHILE
loop to do this.
You can use insert
to insert this into #TempMain
, but I don't se a need to have a temporary table for storing the results of this query.
Upvotes: 2