我目前正在两个查询上使用UNION(参见下面的伪代码):
query1
UNION
query2
我想在结果中添加一个附加列,说明数据的来源。新专栏名为" Source"将返回以下之一:" 1"," 2"或"两者"。
能够处理"两者"非常重要,因为query1和query2将具有类似的结果和许多重叠记录。如果有人能帮助我指出正确的方向,特别是如何处理"两者"案例,非常感谢!
样品: 如果query1有一行" Apple,Yellow,Bob"和query2有相同的行,然后我希望的结果是:
"苹果,黄色,鲍勃,这两种"
单个查询本身不会有重复项,但query1和query2中可能都有相同的行(如上所示)。
答案 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