SQL UNION - 添加源
Posted
技术标签:
【中文标题】SQL UNION - 添加源【英文标题】:SQL UNION - Adding Source 【发布时间】:2018-02-21 22:14:33 【问题描述】:我目前在两个查询中使用 UNION(请参阅下面的伪代码):
query1
UNION
query2
我想在我的结果中添加一个额外的列,说明数据的来源。名为“Source”的新列将返回以下值之一:“1”、“2”或“both”。
能够处理“两者”非常重要,因为 query1 和 query2 将有相似的结果和许多重叠的记录。如果有人可以帮助我指出正确的方向,特别是如何处理“两者”的情况,那将不胜感激!
示例: 如果 query1 有一行“Apple,Yellow,Bob”并且 query2 有同一行,那么我希望的结果是:
“苹果,黄色,鲍勃,两者”
各个查询本身不会有重复项,但 query1 和 query2 中可能存在同一行(如上所示)。
【问题讨论】:
编辑您的问题并提供示例数据、所需结果和数据库标签。此外,解释如何处理其中一个或两个来源中的重复。 【参考方案1】:向查询 1 和查询 2 添加 Source 字段:
select 1 as source, ...
from table1
union
select 2 as source, ...
from table2
【讨论】:
这让我很接近 - 但如何处理“两者”的情况?如果这有助于更好地解释我的问题,我只是添加了一个示例! :) 不可能两者兼有,只有一个 UNION 你会从每个查询中得到一行。 如果你想拥有 Both,你需要用 GROUP BY 子句将 UNION 包装在另一个查询中 你能展示如何做到这一点的伪代码吗?如果它同时在 query1 和 query2 中,我确实希望新列说“两者”。现在你的初步答案是好的,但不处理我发布的例子/“两者”的情况。感谢您的帮助和时间! SELECT CASE WHEN count(*) = 1 THEN Source ELSE 'Both' END AS Source, ... FROM (联合查询) GROUP BY Source, ...【参考方案2】:这是一种方法
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
【讨论】:
【参考方案3】:另一种方法
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
【讨论】:
【参考方案4】:您可以像这样使用额外的列 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 中。
col4=3的记录在table1+table中都存在
【讨论】:
【参考方案5】:你可以试试这个
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
【讨论】:
以上是关于SQL UNION - 添加源的主要内容,如果未能解决你的问题,请参考以下文章