SQL 循环遍历列并将结果插入临时表

标签 sql sql-server

我在临时 #CarIDs 中有一个汽车 ID 列表

CREATE TABLE #CarIDs(
[CARID] [nvarchar] (60) NULL,
[Type] [nvarchar] (20) NULL,
[Flag] [nvarchar] (30) NULL) GO

INSERT INTO #CarIDs (CARID, Type, Flag) VALUES ('1111','',''), ('2222','',''), ('3333','',''), ('4444','',''), ('5555','',''), ('6666','','')

这给了我SELECT * FROM #CarIDs

+-------+-------+--------+
| CARID | Type  |  Flag  |
+-------+-------+--------+
|  1111 |       |        |
|  2222 |       |        |      
|  3333 |       |        |
|  4444 |       |        |
|  5555 |       |        |
|  6666 |       |        |
+-------+-------+--------+

如何循环遍历下表 (CarHierarchy) 以找出每个 CARID 的模型类型,然后将其插入到临时表中?

+-------+-------+-------+
| Jeep  |Holden | Ford  |
+-------+-------+-------+
| 1111  |2222   | 3333  | 
| 4444  |6666   | 5555  |        
+-------+-------+-------+

我希望结果是#CarIDs:

+-------+-------+
| CARID | Type  | 
+-------+-------+
|  1111 |Jeep   |  
|  2222 |Holden |    
|  3333 |Ford   |     
|  4444 |Jeep   |    
|  5555 |Ford   |    
|  6666 |Holden |     
+------+--------+

最佳答案

您需要首先对 #CarHierarchy 表进行 UNPIVOT,然后对 #CarIDs 表执行 JOIN获得正确的类型:

-- Unpivot the #CarHierarchy table using CROSS APPLY
WITH CteCarHierarchy AS(
    SELECT *
    FROM #CarHierarchy
    CROSS APPLY( VALUES
        (Jeep, 'Jeep'),
        (Holden, 'Holden'),
        (Ford, 'Ford')
    )t (CARID, Type)
)
SELECT
    ci.CARID,
    Type = cch.Type,
    ci.Flag
FROM #CarIDs ci
INNER JOIN CteCarHierarchy cch
    ON cch.CARID = ci.CARID

UPDATE 语句:

ONLINE DEMO

WITH CteCarHierarchy AS(
    SELECT *
    FROM #CarHierarchy
    CROSS APPLY( VALUES
        (Jeep, 'Jeep'),
        (Holden, 'Holden'),
        (Ford, 'Ford')
    )t (CARID, Type)
)
UPDATE ci
    SET ci.Type = cch.Type
FROM #CarIDs ci
INNER JOIN CteCarHierarchy cch
    ON cch.CARID = ci.CARID

引用:

关于SQL 循环遍历列并将结果插入临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37827412/

相关文章:

sql-server - SQL Server - 从多个级别导入 XML 字段

SQL Server 05,这是最佳的,LIKE %<term>% 或 CONTAINS() 用于搜索大列

java servlet : duplicate key row in object with unique index 'XAK1timItem'

sql - 像另一个一样创建一个配置单元表,但按键分区

SQL Server 到 MYSQL 迁移工具

mysql - mysql 中计算字符串形式的列名

sql - 从 SQL 2005 EXPRESS 升级到 SQL 2008 EXPRESS

MySQL - 存储发送给大量用户的帖子

sql-server - 将 Guid 主键和聚集索引迁移到 INT (Azure SQL)

sql - 有没有办法合并这两个简单的查询