急,求助,SLQ取编号问题,用ROW_NUMBER() over(PARTITION by也不得其解

晋云 2018-11-10 11:19:30
测试数据:
create table AAA1 
(
ID int, --主键
订单号 nvarchar(50),
颜色 nvarchar(50),
尺码 nvarchar(50) ,
数量 int ,
)
go

insert into AAA1 values(1,'A001','黑色','M',10)
insert into AAA1 values(2,'A001','白色','M',20)
insert into AAA1 values(3,'A001','黑色','L',30)
insert into AAA1 values(4,'A001','兰色','L',40)
insert into AAA1 values(5,'A001','白色','XL',50)
insert into AAA1 values(6,'A002','黑色','M',10)
insert into AAA1 values(7,'A002','白色','M',20)
insert into AAA1 values(8,'A002','黑色','L',30)
insert into AAA1 values(9,'A003','兰色','L',40)
insert into AAA1 values(10,'A003','白色','XL',50)



需求达到的效果:

急,求助,SLQ取编号问题,用ROW_NUMBER() over(PARTITION by也不得其解,不知道哪里出问题,
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-11-10
  • 打赏
  • 举报
回复
引用 9 楼 u010505167 的回复:
就是要这样,太牛了
结贴啊
晋云 2018-11-10
  • 打赏
  • 举报
回复
就是要这样,太牛了
二月十六 2018-11-10
  • 打赏
  • 举报
回复
所以楼主如果不纠结于非得是黑色是1白色2蓝色是3 可以321这样排序的话,这样写也行,就是按照订单分组,然后按照颜色排序
SELECT
*,
DENSE_RANK() OVER (PARTITION BY 订单号
ORDER BY
颜色
) 颜色编码,
DENSE_RANK() OVER (PARTITION BY 订单号
ORDER BY
尺码
) 尺码编码
FROM
AAA1
ORDER BY
ID;


晋云 2018-11-10
  • 打赏
  • 举报
回复
颜色是随时出现的,这样的话CASE后面应该怎么写?
晋云 2018-11-10
  • 打赏
  • 举报
回复
感谢版主,及时回帖解答
哦,但可能有几千订单,然后每个订单颜色不确认,
目的就是 同1订单号,出现3个颜色,生成一个序列,比如123,颜色是随机出现的
像版主上面那样写,一个订单不知道会出现多少颜色,出现什么颜色

二月十六 2018-11-10
  • 打赏
  • 举报
回复
引用 2 楼 u010505167 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:]
颜色编码的要求是什么,为什么兰色是3?而不是1?

不好意思没描述清楚
因为兰色 是 A001订单号的第3个颜色[/quote]
奥,按照订单的话还得加一个PARTITION by

SELECT
*,
DENSE_RANK() OVER (PARTITION BY 订单号
ORDER BY
CASE WHEN 颜色='黑色' THEN 1
WHEN 颜色='白色' THEN 2
WHEN 颜色='兰色' THEN 3
end
) 颜色编码,
DENSE_RANK() OVER (PARTITION BY 订单号
ORDER BY
CASE WHEN 尺码='M' THEN 1
WHEN 尺码='L' THEN 2
WHEN 尺码='XL' THEN 3
end
) 尺码编码
FROM
AAA1
ORDER BY
ID;


二月十六 2018-11-10
  • 打赏
  • 举报
回复
如果要完全按照楼主的顺序来需要加判断处理
SELECT
*,
DENSE_RANK() OVER (
ORDER BY
CASE WHEN 颜色='黑色' THEN 1
WHEN 颜色='白色' THEN 2
WHEN 颜色='兰色' THEN 3
end
) 颜色编码,
DENSE_RANK() OVER (
ORDER BY
CASE WHEN 尺码='M' THEN 1
WHEN 尺码='L' THEN 2
WHEN 尺码='XL' THEN 3
end
) 尺码编码
FROM
AAA1
ORDER BY
ID;


二月十六 2018-11-10
  • 打赏
  • 举报
回复
明白楼主的意思了,编号是固定的吗?还是只要排出来123就行,如果排出来就行就这样
SELECT
*,
DENSE_RANK() OVER (
ORDER BY
颜色
) 颜色编码,
DENSE_RANK() OVER (
ORDER BY
尺码
) 尺码编码
FROM
AAA1
ORDER BY
ID;


晋云 2018-11-10
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
颜色编码的要求是什么,为什么兰色是3?而不是1?

不好意思没描述清楚
因为兰色 是 A001订单号的第3个颜色
二月十六 2018-11-10
  • 打赏
  • 举报
回复
颜色编码的要求是什么,为什么兰色是3?而不是1?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧