您好我对sql server
有疑问Table : emp
Id | Desc
1 | abc
2 | def
3 | har
table2:emp1
Id | Desc
3 | Har
4 | jai
4 | jai
5 | uou
6 | uni
6 | udkey
2 | Jainiu
基于上表我想要输出如下
ID | Desc
1 | abc
2 | def
3 | har
4 | jai
5 | uou
6 | uni
我试过以下
select id, desc from emp
union
select * from (select *,row_number()over(partition by id)as rn from emp1)
where rn=1
执行此查询后,我收到如下错误
Msg 205,Level 16,State 1,Line 2
使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在目标列表中必须具有相同数量的表达式。
上面说的第一个查询是2列,2个查询是3列,这个过程 我们如何避免这个列。 请告诉我如何在sql server
中编写查询以执行此任务答案 0 :(得分:1)
使用:
SELECT id,
desc
FROM emp
UNION
SELECT id,
desc
FROM emp1
Union
将按正确顺序自动执行distinct
和sort
,您无需执行任何操作,无需防风功能
结果:
ID | Desc
1 | abc
2 | def
2 | Jainiu
3 | har
4 | jai
5 | uou
6 | uni
6 | udkey
如果您要删除udkey
和Jainiu
,请在def
和Jainiu
之间选择一个logi,等等......
答案 1 :(得分:0)
使用Union或Distinct我们可以重新复制和row_number我们可以得到输出和In union应该有相同数量的列 DECLARE @emp TABLE ([Id] int,[var] varchar(3)) ;
INSERT INTO @emp
([Id], [Desc])
VALUES
(1, 'abc'),
(2, 'def'),
(3, 'har')
DECLARE @emp1 TABLE
([Id] int, [Desc] varchar(6))
INSERT INTO @emp1
([Id], [Desc])
VALUES
(3, 'Har'),
(4, 'jai'),
(4, 'jai'),
(5, 'uou'),
(6, 'uni'),
(6, 'udkey'),
(2, 'Jainiu')
;with CTE AS (
select
id,
[Desc],
Row_NUMBER()OVER(PARTITION BY ID ORDER BY ID,[Desc]DESC)RN
from
(select distinct id,[Desc] from @EMP
UNION ALL
select distinct id,[Desc] from @EMP1)T)
select id,[Desc] from CTE
WHERE RN = 1