如何在UNION查询中强制执行特定顺序

时间:2018-02-12 10:14:51

标签: sql sql-server union

我在追求的是什么:

--heading--
xxx 111
xxx 222
xxx 333
yyy 111
yyy 222
yyy 333

标题是一个恒定值,它需要保持在顶部。数字(111,222,333)是从表格中选择的值。字母(xxx,yyy)是常数值。我需要的是连续3'x'行,然后连续3'y'行。当我使用UNION ALL时,我得到了:

--heading--
xxx 111
yyy 111
xxx 222
yyy 222
xxx 333
yyy 333

这是我到目前为止所做的:

SELECT '--heading--' + 
UNION ALL 
SELECT 'xxx ' + Column1
FROM Table1
UNION ALL 
SELECT 'yyy ' + Column1
FROM Table1

3 个答案:

答案 0 :(得分:2)

添加一个重量列并按其排序:

SELECT Column1 FROM (
    SELECT 0 AS SortOrder, '--heading--' AS Column1
    UNION ALL
    SELECT 1, 'xxx ' + Column1
    FROM T_UnitTypes
    UNION ALL
    SELECT 2, 'yyy ' + Column1
    FROM T_UnitTypes
) AS x
ORDER BY SortOrder

答案 1 :(得分:1)

请像这样使用 -

SELECT 0 Ord, '--heading--' Datas
UNION ALL 
SELECT * FROM 
(
    SELECT 1 ord, CONCAT(a.t, yourcolName) z FROM Table1
    CROSS APPLY ( VALUES ( 'xxx' ) ) as  a(t) 
    UNION ALL
    SELECT 2 ord, CONCAT(b.t, yourcolName) z  FROM Table1
    CROSS APPLY ( VALUES ( 'yyy' ) ) as  b(t) 
)u ORDER BY ord

答案 2 :(得分:1)

一次扫描桌面的解决方案。不知道会不会更快

select
    val
from (
    select
        q.rn, val = q.val + t.Column1
    from
        Table1 t
        cross apply (values ('xxx', 1),('yyy', 2)) q(val, rn)
    union all
    select 0, '--heading--'
) t
order by rn