我有两个临时表(#TempA,#TempB)。每个临时表都有几条记录,其格式顺序分别为1、2和3。每个Order有多条记录/行。
例如:
===========================
C1 C2 C3 FormOrder
===========================
abc xyz lmn 1
------------------------
anc ppl nmp 2
----------------------
acc bbl mnp 3
-----------------------
类似地,TempB几乎没有相同格式的记录。
在结合使用union all合并这两个临时表时,我正在获取数据。但是数据不是来自#TempA表的。
我尝试在选择查询的末尾添加“订购依据”,但是我以不同的方式获得结果。
select * from #TempA
Union All
select * from #TempB
===========================
C1 C2 C3 FormOrder
===========================
abc xyz lmn 1
-----------------------
acc bbl mnp 3
----------------------
anc ppl nmp 2
----------------------
xyz ccc nnn 1
------------------------
xyn klm uul 2
------------------------
cpp klm rnp 3
------------------------
此处缺少#TempA中的订单。所以当我尝试使用Order By
select * from #TempA
Union All
select * from #TempB
Order by FormOrder
==========================
C1 C2 C3 FormOrder
============================
abc xyz lmn 1
---------------------------
xyz ccc nnn 1
----------------------------
anc ppl nmp 2
----------------------------
xyn klm uul 2
--------------------------
acc bbl mnp 3
-----------------------------
cpp klm rnp 3
-------------------------
我收到上述订单,但我希望该订单为1,2,3,而TempA 1,2、3来自TempB。
============================
C1 C2 C3 FormOrder
============================
abc xyz lmn 1
--------------------------
anc ppl nmp 2
-------------------------
acc bbl mnp 3
-----------------------
xyz ccc nnn 1
-------------------------
xyn klm uul 2
---------------------------
cpp klm rnp 3
------------------------
我该如何实现?任何帮助表示赞赏。
答案 0 :(得分:2)
您可以执行以下操作:
SELECT *
FROM (
SELECT 'A' AS Source, * from #TempA
Union All
select 'B', * from #TempB
) SEL
Order by Source
, FormOrder
当然,您不应该使用SELECT *
,因为其中一个表可能会更改结构。
答案 1 :(得分:0)
您可以尝试以下操作:
Declare @TempA Table(C1 varchar(5),C2 varchar(5),C3 varchar(5), FormOrder int)
Declare @TempB Table(C1 varchar(5),C2 varchar(5),C3 varchar(5), FormOrder int)
insert into @TempA
SELECT 'abc','xyz','mn',1 Union All
SELECT 'anc','ppl','mp',2 Union All
SELECT 'acc','bbl','np',3
insert into @TempB
SELECT 'xyz','ccc','nnn',1 Union All
SELECT 'xyn','klm','uul',2 Union All
SELECT 'cpp','klm','rnp',3
;with cte
As
(
Select C1,C2,C3,FormOrder,NULL as FormOrder2 from @TempA
Union All
Select C1,C2,C3,NULL as FormOrder, FormOrder as FormOrder2 from @TempB
)
Select C1,C2,C3,ISNULL(FormOrder,FormOrder2) As SortOrder
from cte order by FormOrder2,FormOrder
答案 2 :(得分:-1)
create table tempA(
c1 varchar2(10),
c2 varchar2(10),
c3 varchar2(10),
formOrder number(2)
);
create table tempB(
c1 varchar2(10),
c2 varchar2(10),
c3 varchar2(10),
formOrder number(2)
);
insert into tempA values('abc','xyz','lmn',1);
insert into tempA values('anc','ppc','nmp',2);
insert into tempA values('acc','bbl','mnp',3);
insert into tempB values('xyz','ccc','nnn',1);
insert into tempB values('xyn','klm','nnl',2);
insert into tempB values('cpp','klm','rnp',3);
select * from tempA
union all
select * from tempB;
C1 C2 C3 FORMORDER
---------- ---------- ---------- ----------
abc xyz lmn 1
anc ppc nmp 2
acc bbl mnp 3
xyz ccc nnn 1
xyn klm nnl 2
cpp klm rnp 3