【问题标题】:SQL Iterate (loop) a query based on list of row groupings, and merge results of each iteration into same tableSQL迭代(循环)基于行分组列表的查询,并将每次迭代的结果合并到同一张表中
【发布时间】:2021-01-12 16:36:54
【问题描述】:

编辑:我无法删除 WHERE 命令,因为数据太大而无法完全合并,因此我想按国家子集进行迭代

我刚刚开始使用 SQL

我写了一个简单的 Query 合并,删除重复,并创建一个表:

SELECT DISTINCT z. Owner, z.Client,
C.[Sector], SUBSTRING(z.Address, 1, 2) AS 'Country',

CASE WHEN C.Sector ='Manufacturing' AND SUBSTRING(z.Address, 1, 2)=z.Client THEN 1
ELSE 0 END AS Sample_indicator

INTO Summary_table
FROM Main_table z
LEFT JOIN Sector_key AS C ON z.Owner = C.ID

WHERE SUBSTRING(z.Address, 1, 2)="KR"

我有这个工作,但是,我想做的是为所有不同的 'SUBSTRING(z.Address, 1, 2)'“循环”/迭代这个查询。

我在这里展示的是 KR,但我希望它循环播放大约一百个国家。

最后,作为关键部分,我还需要创建“Summary_table”的结果表来包含每个后续循环的结果。这意味着该表将增长存储来自每个国家/地区的结果。

我已经尝试了好几个小时,任何建议或帮助都是天赐良机。非常感谢

【问题讨论】:

    标签: sql loops append iteration


    【解决方案1】:

    由于您要寻找循环,只需尝试将所有 DISTINCT 国家/地区选择到一个临时表中,然后将所有这些国家/地区与您的代码一起循环。

    DECLARE @Countries TABLE
    (
        [Country] VARCHAR(5)
    )
    DECLARE @Country VARCHAR(5) -- For looping
    
    INSERT INTO @Countries ([Country])
    SELECT DISTINCT SUBSTRING(Address, 1, 2)
    FROM Main_table
    
    WHILE (SELECT COUNT(1) FROM @Countries > 1)
    BEGIN
        SELECT TOP 1 @Country = [Country]
        FROM @Countries
    
        /* Your code goes here ******************************/
        
        DELETE FROM @Countries
        WHERE  [Country] = @Country
    END
    

    【讨论】:

    • 请提一个问题,底部的 WHERE 语句应该替换我代码中的那个吗?谢谢
    • 按原样使用您的代码,但将其替换为 WHERE SUBSTRING(z.Address, 1, 2)="KR" ==>> WHERE SUBSTRING(z.Address, 1, 2) = @国家
    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多