SELECT 'ABC-D Header1' As Seq1
UNION
SELECT 'ABC-D Header2' AS seq2
UNION
SELECT ABC-D data1 data2..3..data4 ' AS seq3
UNION
SELECT 'ABC-D Tail' AS Seq4
ORDER BY SEQ1 ASC
OUTPUT:
ABC-D data1 data2..3..data4
ABC-D Header1
ABC-D Header2
ABC-D Tail
EXPECTED RESULT :
ABC-D Header1
ABC-D Header2
ABC-D data1 data2..3..data4
ABC-D Tail
谁能帮我UNION在内部的工作方式,我正在处理硬编码的值,该值应分为两行(Header1,Header2),后跟数据和Tail部分。我也尝试过ASC和DESC,似乎无法按预期提供准确的结果。
任何帮助将不胜感激。
为所需的顺序添加另一列
SELECT 'ABC-D Header1' As Seq1, s = 1
UNION
SELECT 'ABC-D Header2' AS seq2, s = 2
UNION
SELECT 'ABC-D data1 data2..3..data4 ' AS seq3, s = 3
UNION
SELECT 'ABC-D Tail' AS Seq4, s = 4
ORDER BY s ASC
select Seq1
from
(
SELECT 'ABC-D Header1' As Seq1, number = 1
UNION
SELECT 'ABC-D Header2' AS seq2, number = 2
UNION
SELECT 'ABC-D data1 data2..3..data4 ' AS seq3, number = 3
UNION
SELECT 'ABC-D Tail' AS Seq4, number = 4
) a
ORDER BY number ASC
或者您也可以像这样使用Desired table
而不使用多余的列
SELECT Seq1
FROM(
VALUES
('ABC-D Header1'),
('ABC-D Header2'),
('ABC-D data1 data2..3..data4 '),
('ABC-D Tail')
)v(Seq1)
您在每行之后放置的别名-seq1
,seq2
等实际上不是该行的别名,而是该列的别名。您只有一列,将被称为seq1,因为这是您在联合中的第一选择上为其赋予的别名。其他别名将被简单丢弃。
我也同意,如果您不希望更改给定的顺序,则不应放置ORDER BY
子句。
但是,SQL不保证以任何特定顺序返回结果集。尽管通常这种简单的硬编码值联合将没有理由以您给定的顺序以外的其他任何顺序返回,但这不是必须的。如果要确保特定的订购,应采用以下方式:
SELECT 'ABC-D Header1' As description, 1 as seq
UNION
SELECT 'ABC-D Header2', 2
UNION
SELECT 'ABC-D data1 data2..3..data4 ', 3
UNION
SELECT 'ABC-D Tail', 4
ORDER BY seq
实际上,我认为您正在尝试这样做。我希望这会有所帮助。