【问题标题】:Concatenate data in sql query在sql查询中连接数据
【发布时间】:2016-10-13 20:01:41
【问题描述】:

我有桌子 1

     Pre    Ba          pre-Ba       kgs    fl
    6L34    1523726 6L34-1523726    0.01    Bm1
    6L34    1523726 6L34-1523726    0.04    Bm1
    6L34    1523726 6L34-1523726    0.06    Bm1
    BM51    13K732  BM51-13K732      0      Bm1
    BM51    13K732  BM51-13K732      8      Bm1

表2

 Pre    Ba          pre-Ba       kgs    fl
6L34    1523726 6L34-1523726    0.01    Bm2
BM51    13K732  BM51-13K732     0.02    Bm2
BM51    13K732  BM51-13K732        8    Bm2

我正在尝试通过 union all 将这些查询表组合为一个,但将 "fl" col 与条件连接起来,例如:在表 1 pre-Ba col 数据 6L34 -1523726 有 0.01 kgs 与 table2 数据匹配 6L34-1523726 有 0.01 kgs 所以结果应该像

Pre      Ba         pre-Ba       kgs    fl
6L34    1523726 6L34-1523726    0.01    Bm1&bm2
6L34    1523726 6L34-1523726    0.04    Bm1
6L34    1523726 6L34-1523726    0.06    Bm1
BM51    13K732  BM51-13K732     0       Bm1
BM51    13K732  BM51-13K732     8       Bm1
6L34    1523726 6L34-1523726    0.01    Bm2&bm1
BM51    13K732  BM51-13K732     0.02    Bm2
BM51    13K732  BM51-13K732     8       Bm2&bm1

如何在查询中指定?

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    通常您会使用 FULL OUTER JOIN 来执行此操作。但是......这在 Access 中不存在。所以你需要做两个查询,利用 LEFT OUTER JOIN 和一些逻辑来确保没有重叠:

    SELECT
        t1.pre,
        t1.ba,
        t1.pre-ba,
        t1.kgs,
        t1.f1 & "&" & t2.f1
    FROM
        table1 as t1
        LEFT OUTER JOIN table2 as t2 ON
            t1.pre = t2.pre AND
            t1.ba = t2.ba AND
            t1.pre-ba = t2.pre-ba AND
            t1.kgs = t2.kgs
    
    UNION ALL
    
    SELECT
        t2.pre,
        t2.ba,
        t2.pre-ba,
        t2.kgs,
        t2.f2 & "&" & t1.f2
    FROM
        table2 as t2
        LEFT OUTER JOIN table1 as t1 ON
            t2.pre = t1.pre AND
            t2.ba = t1.ba AND
            t2.pre-ba = t1.pre-ba AND
            t2.kgs = t1.kgs 
    

    第一个查询获取 Table1 中的所有内容,但不是 Table2 中的所有内容,以及 Table1 AND Table2 中的内容。第二个查询获取仅在 Table2 中的内容。

    【讨论】:

    • 当公斤匹配时它只给我一次出现,如 0.01 Bm1&bm2 但需要有 2 次出现,如问题中显示的结果
    • 明白了。我正在考虑重复。我已经删除了第二个查询中的 WHERE 条件,它应该允许它通过。
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多