Ion*_*Ion 7 sql union sql-server-2008
我有个问题:
我想使用 UNION 将两个 SQL 查询连接到一个查询中以避免重复,但我需要知道数据是来自第一个选择查询还是来自第二个选择查询。
样本数据:
A TABLE B TABLE
-----------------------------------------------------------------------------
01 JOHN 01 JOHN
02 JUAN 02 PETER
03 MARTIN 03 MARTIN
Run Code Online (Sandbox Code Playgroud)
我有这样的事情:
Select A.code,A.name from A where some conditions
unión
Select B.code,B.name from B where diferent conditions
Run Code Online (Sandbox Code Playgroud)
结果表
01 JOHN
02 JUAN
02 PETER
03 MARTIN
Run Code Online (Sandbox Code Playgroud)
这工作正常,但现在如果我想知道数据是来自第一个查询还是来自第二个查询,我认为是这样的:
Select A.code,A.name, 'A' from A where some conditions
unión
Select B.code,B.name, 'B' from B where diferent conditions
Run Code Online (Sandbox Code Playgroud)
结果表
01 JOHN 'A'
01 JOHN 'B'
02 JUAN 'A'
02 PETER 'B'
03 MARTIN 'A'
03 MARTIN 'B'
Run Code Online (Sandbox Code Playgroud)
但是不要避免“重复”,因为 'A' 与 'B' 不同,所以问题是,我可以做些什么让他们不将 'A' 与 'B' 进行比较吗?得到预期的结果?
编辑:
预期的结果
01 JOHN 'A'
02 JUAN 'A'
02 PETER 'B'
03 MARTIN 'A'
Run Code Online (Sandbox Code Playgroud)
这是另一种方法:
SELECT code, name, MIN(SourceTable) AS SourceTable
FROM (
SELECT code, name, 'A' AS SourceTable
FROM A
UNION
SELECT code, name, 'B' AS SourceTable
FROM B) t
GROUP BY code, name
ORDER BY code
Run Code Online (Sandbox Code Playgroud)
也许:
SELECT code, name, SourceTable
FROM (
SELECT code, name, SourceTable,
ROW_NUMBER() OVER (PARTITION BY code, name
ORDER BY SourceTable) AS rn
FROM (
SELECT code, name, 'A' AS SourceTable
FROM A
UNION ALL
SELECT code, name, 'B' AS SourceTable
FROM B) t) AS x
WHERE x.rn = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6344 次 |
| 最近记录: |