社区
疑难问题
帖子详情
关于order by (case when 条件1 then 字段1 else 字段3),字段1,字段2,字段3)
huxin1
2004-01-27 06:26:01
请蒋老师、马可、邹建帮讲解一下它的排序规律是怎样的,好吗?我实在想不明白。最好从原理上分析一个,算我求你们了。
...全文
1482
6
打赏
收藏
关于order by (case when 条件1 then 字段1 else 字段3),字段1,字段2,字段3)
请蒋老师、马可、邹建帮讲解一下它的排序规律是怎样的,好吗?我实在想不明白。最好从原理上分析一个,算我求你们了。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jyk1970
2004-01-27
打赏
举报
回复
create table tt
(
bmid int,
boardid int,
parentid int
)
insert into tt values(1, 1, 9)
insert into tt values(2, 2, 17)
insert into tt values(5, 3, 18)
insert into tt values(9, 0, 0)
insert into tt values(15, 0, 0)
insert into tt values(16, 4, 17)
insert into tt values(17, 0, 0)
insert into tt values(18, 0, 0)
insert into tt values(5, 3, 18)
go
--你的方法
select * from tt order by (case when parentid=0 then bmid else parentid end),parentid,bmid,boardid;
--等效的方法
select (case when parentid=0 then bmid else parentid end) as myid, *
from tt
order by myid,parentid,bmid,boardid
--结果必然是
myid bmid boardid parentid
----------- ----------- ----------- -----------
9 9 0 0
9 1 1 9
15 15 0 0
17 17 0 0
17 2 2 17
17 16 4 17
18 18 0 0
18 5 3 18
18 5 3 18
huxin1
2004-01-27
打赏
举报
回复
大家还是没有明白我的意思,还是举例说明吧
有这样一个表tt(bmid int,boardid int,parentid int)
如果用select * from tt;结果集如下:
bmid boardid parentid
----------- ----------- -----------
1 1 9
2 2 17
5 3 18
9 0 0
15 0 0
16 4 17
17 0 0
18 0 0
5 3 18
(所影响的行数为 9 行)
而用select * from tt order by (case when parentid=0 then bmid else parentid end),parentid,bmid,boardid;结果集如下:
bmid boardid parentid
----------- ----------- -----------
9 0 0
1 1 9
15 0 0
17 0 0
2 2 17
16 4 17
18 0 0
5 3 18
5 3 18
(所影响的行数为 9 行)
我不明白的是第二种情况为什么不是以下这种情况呢?
bmid boardid parentid
----------- ----------- -----------
9 0 0
15 0 0
17 0 0
18 0 0
1 1 9
2 2 17
16 4 17
5 3 18
5 3 18
(所影响的行数为 9 行)
zhaoloudy
2004-01-27
打赏
举报
回复
mark
Jianli2004
2004-01-27
打赏
举报
回复
order by (case when 条件1 then 字段1 else 字段3),字段1,字段2,字段3)
应该是
order by (case when 条件1 then 字段1 else 字段3 end),字段1,字段2,字段3)
在条件1下按字段1其他情况下按字段3排序
huxin1
2004-01-27
打赏
举报
回复
楼上的大哥,这些我是知道的,我是搞不明白我提出的这种情况。最好拿实例来讲解。
azsoft
2004-01-27
打赏
举报
回复
语法
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n ] ]
参数
order_by_expression
指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。
可指定多个排序列。ORDER BY 子句中的排序列序列定义排序结果集的结构。
ORDER BY 子句可包括未出现在此选择列表中的项目。然而,如果指定 SELECT DISTINCT,或者如果 SELECT 语句包含 UNION 运算符,则排序列必定出现在选择列表中。
此外,当 SELECT 语句包含 UNION 运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。
说明 在 ORDER BY 子句中不能使用 ntext、text 和 image 列。
ASC
指定按递增顺序,从最低值到最高值对指定列中的值进行排序。
DESC
指定按递减顺序,从最高值到最低值对指定列中的值进行排序。
空值被视为最低的可能值。
对 ORDER BY 子句中的项目数没有限制。然而,对于排序操作所需的中间级工作表的大小有 8,060 字节的限制。这限制了在 ORDER BY 子句中指定的列的合计大小。
sql学习--
order
by与
case
when then
行云数据库的操作 update 修改某一列的数据
MySQL
order
by基于不同
字段
条件
排序
MySQL
order
by基于不同
字段
条件
排序 在做需求的过程中,产品要求在页面查询数据的时候,在某个
字段
的不同值的基础上再选择不同的
字段
进行排序,具体需求如下: 1:首先有一个基础
字段
follow_up_type,follow_up_type的取值分别为:1、2、3、4 2:先对follow_up_type进行排列,但是要求顺序为:2、1、3、4(其实每个值都代表一种含义,简单处理就是,将1和...
【Mybatis】返回值替换
case
when then
目录用法总结1. 单一
条件
判断
case
when then end
case
when then else end
case
when 判定 then else end2. 多
条件
判断3. 在 `
ORDER
BY` 中使用4. 在 `UPDATE` 语句中使用分段统计注意事项二、其他在 MyBatis 中,`
CASE
WHEN THEN END` 结构通常用于在 SQL 查询中实现
条件
逻辑,类似于编程语言中的 `switch` 或 `if-else` 语句。下面是一些使用 `
CASE
WHEN THEN EN
SQL中
case
when then else 语句的使用
case
when then else SQL语句 sql语句判断方法之一
Case
具有两种格式。简单
Case
函数和
Case
搜索函数。 –简单
Case
函数
CASE
sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –
Case
搜索函数
CASE
WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ ELSE ‘其他’ END 这两种方式,可以实现相同的功能。简单
Case
函数的写法相对比较简洁,但是和
Case
搜
对SQL语句中
case
when...then...else...end的理解
最近在开发中遇到一个业务想了好久写了很多代码都解决不了,最后发现一句SQL语句就能完美解决了。 是这样的,商城中各商品都有对应的市场价marketprice,存在对应的数据表里shop_goods。 根据客户的会员等级RANK_ID不同可以给予不同的优惠价USER_PRICE,在页面呈现展示,重要的是用户点击后要按照价格高低排序 ,所以要在一条sql语句中执行。 而这些价格是以RANK_I
疑难问题
22,298
社区成员
121,727
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章