需要sql帮助:对于表A中的每条记录(列表比表B多),插入表B中

时间:2017-11-15 14:50:29

标签: sql sql-server

我知道我的主题有点稀疏,但对于我的生活,我无法弄清楚如何做到这一点。我可以在C#中实现这一点,但我对SQL语法感到困惑。我搜索和搜索,似乎无法找到我正在寻找的东西,因为我不理解我正在查看的一些SQL。

TABLE 1
-----------
| CustNo | Catalog1 | Catalog2 | Catalog3 | Catalog4 |
|    1   |    A     |    B     |    C     |   NULL   |
|    2   |    B     |    C     |   NULL   |    D     |
|    3   |    A     |    C     |    E     |    F     |



TABLE 2 (empty)
COLUMNS: CustNo|Catalog

所以基本上对于表1中的每条记录,我想将目录插入表2中。 因此,所需的输出将如下所示。

TABLE 2
CustNo|Catalog
|  1  |  A
|  1  |  B
|  1  |  C
|  2  |  B
|  2  |  C
|  2  |  D
|  3  |  A
|  3  |  C
|  3  |  E
|  3  |  F

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:6)

只是透视。我喜欢使用apply;

执行此操作
insert into table2 (CustNo, Catalog)
    select t1.CustNo, v.Catalog
    from table1 t1 cross apply
         (values (t1.Catalog1), (t1.Catalog2), (t1.Catalog3), (t1.Catalog4)
         ) v(catalog)
    where v.Catalog is not null;