Sql server 按SQL Server 2017中的第一行、最后一行和其余两个表排序
我有以下两张桌子。我需要合并2个表的基础上也排序 几乎没有条件Sql server 按SQL Server 2017中的第一行、最后一行和其余两个表排序,sql-server,Sql Server,我有以下两张桌子。我需要合并2个表的基础上也排序 几乎没有条件 DROP TABLE IF EXISTS #t1 CREATE TABLE #t1 ( id INT IDENTITY PRIMARY KEY, value INT ) DROP TABLE IF EXISTS #t2 CREATE TABLE #t2 ( id INT IDENTITY PRIMARY KEY, value int ) INSERT INTO #t1 (value) VAL
DROP TABLE IF EXISTS #t1
CREATE TABLE #t1
(
id INT IDENTITY PRIMARY KEY,
value INT
)
DROP TABLE IF EXISTS #t2
CREATE TABLE #t2
(
id INT IDENTITY PRIMARY KEY,
value int
)
INSERT INTO #t1 (value)
VALUES (1), (30), (19), (10), (40);
INSERT INTO #t2 (value)
VALUES (100), (70), (20);
SELECT * FROM #t1
UNION
SELECT * FROM #t2
我需要根据以下条件合并2个表和排序值
#t1
第一行(固定)#t1
最后一行(固定)#t1
基于值的休息(第一行除外)
4#t2
仅根据值排序为什么要使用
varchar
存储数值?在排序之前,您需要执行一个cast()或convert()
假设:通过第一个
或最后一个
您指的是列id
中具有最小值和最大值的行
select value, seq as [order]
from
(
select id, value,
seq = case when row_number() over(order by id) = 1 then 1
when row_number() over(order by id desc) = 1 then 2
else 3
end
from #t1
union all
select id, value, seq = 4
from #t2
) d
order by seq, convert(int, value)
为什么要使用varchar
存储数值?在排序之前,您需要执行一个cast()或convert()
假设:通过第一个
或最后一个
您指的是列id
中具有最小值和最大值的行
select value, seq as [order]
from
(
select id, value,
seq = case when row_number() over(order by id) = 1 then 1
when row_number() over(order by id desc) = 1 then 2
else 3
end
from #t1
union all
select id, value, seq = 4
from #t2
) d
order by seq, convert(int, value)
您可以使用ORDER子句中的CASE语句检查以下输出排序逻辑-
SELECT *
FROM
(
select 'T1' T_Name,* from #t1
union
select 'T2',* from #t2
)A
ORDER BY
CASE
WHEN t_name = 'T1' AND id = (SELECT MIN(ID) FROM #t1) THEN 1
WHEN t_name = 'T2' AND id = (SELECT MAX(ID) FROM #t2) THEN 2
WHEN t_name = 'T1' THEN 3
ELSE 4
END,
Id -- Or you can order by Value. Just keep in mind that Value is VARCHAR as per your setup. So, Ordering will be also impact accordingly.
您可以使用ORDER子句中的CASE语句检查以下输出排序逻辑-
SELECT *
FROM
(
select 'T1' T_Name,* from #t1
union
select 'T2',* from #t2
)A
ORDER BY
CASE
WHEN t_name = 'T1' AND id = (SELECT MIN(ID) FROM #t1) THEN 1
WHEN t_name = 'T2' AND id = (SELECT MAX(ID) FROM #t2) THEN 2
WHEN t_name = 'T1' THEN 3
ELSE 4
END,
Id -- Or you can order by Value. Just keep in mind that Value is VARCHAR as per your setup. So, Ordering will be also impact accordingly.
在第一个表中,“first”行不是1,“last”不是40,除非您还包括另一个保持该顺序的列。在第一个表中,“first”行不是1,“last”不是40,除非您还包括另一个保持该顺序的列。然后您可以删除CONVERT()
在ORDER BY
条款中,您可以删除ORDER BY
子句中的CONVERT()