首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server中的嵌套while循环未显示预期结果

SQL Server中的嵌套while循环未显示预期结果
EN

Stack Overflow用户
提问于 2019-06-12 03:38:45
回答 1查看 19关注 0票数 0

我正在尝试连接来自两个不同表的记录,以便可以在SSRS tablix中以表格格式显示数据。

下面的代码没有返回预期的结果。

如上所述,对于Temp_A中的每一项,循环都会使用Temp_C中的最后一项更新所有内容。代码如下:

代码语言:javascript
复制
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

错误的结果:

代码语言:javascript
复制
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

预期结果:

代码语言:javascript
复制
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

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-06-12 03:41:34

你似乎想要一个cross join

代码语言:javascript
复制
select a.*, c.*
from #Temp_A a cross join
     #Temp_C c
order by a.id, c.id;

Here是一个db<>fiddle。

不需要编写WHILE循环来实现这一点。

您可以使用insert将其插入到#TempMain中,但我不认为需要有一个临时表来存储此查询的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56550672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档