Tsql 如何在T-SQL联合查询中按结果集排序

Tsql 如何在T-SQL联合查询中按结果集排序,tsql,Tsql,我想在上一个sql查询中使用ORDERBY子句,我有3个以上的union查询。我不想对前2个联合查询排序,但我想在上一条sql语句中使用ORDERBY子句。 当前,正在获取错误 如果语句包含UNION、INTERSECT或EXCEPT运算符,则ORDER BY项必须出现在选择列表中 orderby是对联合的结果进行排序,但是您可以引入orderIndex列来实现正确的排序 以下是示例: 我尝试在下面的代码中构建示例数据 create table table1( useri

我想在上一个sql查询中使用ORDERBY子句,我有3个以上的union查询。我不想对前2个联合查询排序,但我想在上一条sql语句中使用ORDERBY子句。 当前,正在获取错误

如果语句包含UNION、INTERSECT或EXCEPT运算符,则ORDER BY项必须出现在选择列表中


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