SQL UNION - 添加源

时间:2018-02-21 22:14:33

标签: sql sql-server union

我目前正在两个查询上使用UNION(参见下面的伪代码):

query1 
UNION
query2

我想在结果中添加一个附加列,说明数据的来源。新专栏名为" Source"将返回以下之一:" 1"," 2"或"两者"。

能够处理"两者"非常重要,因为query1和query2将具有类似的结果和许多重叠记录。如果有人能帮助我指出正确的方向,特别是如何处理"两者"案例,非常感谢!

样品: 如果query1有一行" Apple,Yellow,Bob"和query2有相同的行,然后我希望的结果是:

"苹果,黄色,鲍勃,这两种"

单个查询本身不会有重复项,但query1和query2中可能都有相同的行(如上所示)。

5 个答案:

答案 0 :(得分:0)

向查询1和查询2添加源字段:

select 1 as source, ...
from table1
union
select 2 as source, ...
from table2

答案 1 :(得分:0)

这是单程

WITH T
     AS (SELECT '1' AS Source,
                Col1,
                Col2,
                Col3
         FROM   table1
         UNION ALL
         SELECT '2' AS Source,
                Col1,
                Col2,
                Col3
         FROM   table2)
SELECT CASE
         WHEN MAX(Source) = MIN(Source) THEN Source
         ELSE 'Both'
       END AS Source,
       Col1,
       Col2,
       Col3
FROM   T
GROUP  BY Col1,
          Col2,
          Col3 

答案 2 :(得分:0)

另一种方法

SELECT col1
    ,col2
    ,source = CASE 
        WHEN count(DISTINCT source) > 1
            THEN 'Both'
        ELSE max(source)
        END
FROM (
    SELECT col1 ,col2, source = 'source1'
    FROM source1
    UNION ALL
    SELECT col1, col2, source = 'source2'
    FROM source2
    ) u
GROUP BY col1, col2

答案 3 :(得分:0)

你可以使用像这样的附加列col4

select col1,col2,col3,sum(col4) 
from(    
    Select col1, col2, col3, 1 as col4 from table1
    UNION 
    Select col1,col2,col3, 2 as col4 from table4
)
group by col1,col2,col3

col4 = 1的记录仅存在于table1中。

col4 = 2的记录仅存在于table2中。

table1 + table

中存在col4 = 3的记录

答案 4 :(得分:0)

你可以试试这个

 SELECT
    a.col1 , a.col2,
    CASE WHEN MAX(a.Source) <> MIN(a.Source) 
      THEN 'BOTH'
     ELSE MAX(a.Source) END
    FROM
    (
    SELECT
    col1, col2 ,'Source2' AS Source
    FROM Table1

    UNION ALL 

    SELECT
    col1, col2 ,'Source1' AS Source
    FROM Table2
    ) a
    GROUP BY 
    a.col1 , a.col2

链接到Sample