首页 > 解决方案 > 我想为每个选择查询获取数据“order by”,然后使用“Union All”将它们组合起来

问题描述

我有两个临时表(#TempA、#TempB)。每个临时表都有少量记录,格式为 1、2 和 3。每个订单都有多个记录/行。

例如:

温度A

===========================
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
------------------------

我怎样才能做到这一点?非常感谢任何帮助。

标签: sqlsql-server

解决方案


您可以执行以下操作:

SELECT  * 
FROM    (
            SELECT 'A' AS Source, * from #TempA
            Union All
            select 'B', * from #TempB
        ) SEL
Order by Source
,       FormOrder

当然,您不应该使用SELECT *,因为其中一张表可能会改变结构。


推荐阅读