Я хотел бы получить данные 'order by' для каждого запроса на выборку, а затем объединить их, используя 'Union All' - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть две временные таблицы (#TempA, #TempB).каждая временная таблица имеет несколько записей с формой порядка 1, 2 и 3. Каждый ордер имеет несколько записей / строк.

Например:

TempA

===========================
C1     C2    C3    FormOrder
===========================
abc    xyz   lmn    1
------------------------
anc    ppl   nmp    2  
----------------------
acc    bbl   mnp    3
-----------------------

Аналогично,TempB имеет несколько записей в одном формате.

, комбинируя эти две таблицы Temp с использованием union all, я получаю данные.но данные идут не по порядку из таблицы #TempA.

Я пытался добавить 'Order by' в конце запроса select, но я получаю результаты другим способом.

Без использования Order By:

 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 и их от TempA1, 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
------------------------

Как мне этого добиться?Любая помощь высоко ценится.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2019

Вы можете сделать следующее:

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

Конечно, вы не должны использовать SELECT *, потому что одна из таблиц может изменить структуру.

0 голосов
/ 17 апреля 2019

Вы можете попробовать это:

    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
0 голосов
/ 17 апреля 2019
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



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...