加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQL动态ORDER BY行使别名

发布时间:2021-04-02 08:52:56 所属栏目:编程 来源:网络整理
导读:行使SQL Server,我可以行使别名来呼吁正常的SELECT查询: SELECT u.FirstName + ' ' + u.LastName as PhysicianName,COUNT(r.Id) as ReferralsCountFROM Referrals r INNER JOIN Users u ON r.PhysicianId = u.IdGROUP BY r.PhysicianId,u.FirstName,u.LastNa

行使SQL Server,我可以行使别名来呼吁正常的SELECT查询:

SELECT   
   u.FirstName + ' ' + u.LastName as PhysicianName,COUNT(r.Id) as ReferralsCount
FROM     
   Referrals r 
INNER JOIN
   Users u ON r.PhysicianId = u.Id
GROUP BY 
   r.PhysicianId,u.FirstName,u.LastName
ORDER BY 
   PhysicianName

可是,实行行使动态ORDER BY执行沟通的操纵:

SELECT   
   u.FirstName + ' ' + u.LastName as PhysicianName,COUNT(r.Id) as ReferralsCount
FROM     
   Referrals r 
INNER JOIN
   Users u ON r.PhysicianId = u.Id
GROUP 
   BY r.PhysicianId,u.LastName
ORDER BY 
    CASE WHEN @orderby = 'PhysicianName' THEN PhysicianName END,CASE WHEN @orderby = 'ReferralsCount' THEN ReferralsCount END

发生以下错误:

Msg 207,Level 16,State 1,Line 10
Invalid column name ‘PhysicianName’.
Msg 207,Line 11
Invalid column name ‘ReferralsCount’.

办理要领

SELECT中界说的列别名只能在ORDER BY中单独行使.不在表达中.

您可以按如下方法调解原始实行.

;WITH T
     AS (SELECT u.FirstName + ' ' + u.LastName AS PhysicianName,COUNT(r.Id)                    AS ReferralsCount
         FROM   Referrals r
                INNER JOIN Users u
                  ON r.PhysicianId = u.Id
         GROUP  BY r.PhysicianId,u.LastName)
SELECT *
FROM   T
ORDER  BY CASE
            WHEN @orderby = 'PhysicianName' THEN PhysicianName
          END,CASE
            WHEN @orderby = 'ReferralsCount' THEN ReferralsCount
          END

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读