0

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?

1 Answer 1

2

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.

Sign up to request clarification or add additional context in comments.

1 Comment

I used a temp table because I have to update more columns.I just could figure out this first step. Thank you so much.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.