Tsql 如何在T-SQL联合查询中按结果集排序
我想在上一个sql查询中使用ORDERBY子句,我有3个以上的union查询。我不想对前2个联合查询排序,但我想在上一条sql语句中使用ORDERBY子句。 当前,正在获取错误 如果语句包含UNION、INTERSECT或EXCEPT运算符,则ORDER BY项必须出现在选择列表中Tsql 如何在T-SQL联合查询中按结果集排序,tsql,Tsql,我想在上一个sql查询中使用ORDERBY子句,我有3个以上的union查询。我不想对前2个联合查询排序,但我想在上一条sql语句中使用ORDERBY子句。 当前,正在获取错误 如果语句包含UNION、INTERSECT或EXCEPT运算符,则ORDER BY项必须出现在选择列表中 orderby是对联合的结果进行排序,但是您可以引入orderIndex列来实现正确的排序 以下是示例: 我尝试在下面的代码中构建示例数据 create table table1( useri
orderby
是对联合的结果进行排序,但是您可以引入orderIndex列来实现正确的排序
以下是示例:
我尝试在下面的代码中构建示例数据
create table table1(
userid varchar(100),
usertype varchar(100),
date date
)
insert into table1(userid, date) values ('Einsmayr', '2020-10-27')
insert into table1(userid, date) values ('Eins123', '2020-10-27')
insert into table1(userid, date) values ('Einschmid', '2020-10-27')
insert into table1(userid, date) values ('Einshuber', '2020-10-27')
insert into table1(userid, date) values ('Einsreitmayr', '2020-10-27')
create table table2 (
Name varchar(100),
id int
)
insert into table2(Name, id) values('Zweirich', 5)
insert into table2(Name, id) values('Zweifel', 6)
create table table3 (
Name varchar(100),
id int
)
insert into table3(Name, id) values('Dreisinger', 17)
insert into table3(Name, id) values('Dreibert', 18)
这允许进行以下查询:
select usertype, Number
from (
select 'Total Number of pat' usertype, convert(varchar(20), count(id)) Number, 1 orderIndex from table2 where id = 5
union
select 'Total Number of Doc' Name, convert(varchar(20), count(id)) Number, 2 orderIndex from table3
union
select usertype, count(distinct userid) Number, 3 orderIndex
from (
select userid, case when userid like '%[0-9][0-9[0-9]' then 'transition' else 'non transition' end usertype
from table1
where date >= dateadd(day,-7, getdate())
) x
group by x.usertype
) y
order by y.orderIndex, y.usertype
在此处找到解决方案:您是否搜索了按联合排序的
[tsql]订单
?旁白:由于您使用的是按用户类型分组
,因此不会出现任何重复的行。使用而不是联合
将避免排除重复项所需的处理。
select usertype, Number
from (
select 'Total Number of pat' usertype, convert(varchar(20), count(id)) Number, 1 orderIndex from table2 where id = 5
union
select 'Total Number of Doc' Name, convert(varchar(20), count(id)) Number, 2 orderIndex from table3
union
select usertype, count(distinct userid) Number, 3 orderIndex
from (
select userid, case when userid like '%[0-9][0-9[0-9]' then 'transition' else 'non transition' end usertype
from table1
where date >= dateadd(day,-7, getdate())
) x
group by x.usertype
) y
order by y.orderIndex, y.usertype