在论坛中出现的比较难的sql问题:30(row_number函数 物料组合问题)
来源:互联网 发布:淘宝大v认证运营故事 编辑:程序博客网 时间:2024/04/27 19:47
在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。
所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
MS-SQL 根据实际所需规格table去比对另一个库存table取浪费最少的数据
http://bbs.csdn.net/topics/390619048
情境描述:根据表A里的物料去比对表B,然后表A根据A1括号里两个尺寸浪费最少来将A1替换成最省的物料。
表A用量需求表:Table A
A0(自增长ID) A1(物料编号)
-------------------------------
0 ls001-(900*110)
1 ls002-(200*300)
....
表B库存物料表: B1没有重复,可以当作ID来使用 Table B:
B1(库存物料) B2(规格1) B3(规格2)
----------------------------------------------
ls001-(700*200) 700 200
ls001-(910*140) 910 140
ls001-(920*120) 920 120
... ... ...
ls002-(100*200) 100 200
ls002-(200*350) 200 350
ls002-(220*320) 220 320
...
原理是:ls001取(920*120)的话浪费分别是左边920-900=20,右边120-110=10,总共浪费是30, 是ls001库存规格(700*200),(910*140),(920*120)里浪费最少的,ls002同理。
最后A1字段被替换后的效果如下:
A0(自增长ID) A1(物料编号)
-------------------------------
0 ls001-(920*120)
1 ls002-(220*320)
...
各位有什么好的方案或者算法可分享来学习借鉴一下 ^_^
我的解法:
drop table adrop table bcreate table a (a0 int,a1 varchar(100),a2 int,a3 int)insert into aSELECT 0,'ls001-(900*110)',900,110 UNION ALLSELECT 1,'ls002-(200*300)',200,300create table b (B1 varchar(100),B2 int,B3 int)insert into b SELECT 'ls001-(700*200)',700,200 UNION ALLSELECT 'ls001-(910*140)',910,140 UNION ALLSELECT 'ls001-(920*120)',920,120 UNION ALLSELECT 'ls002-(100*200)',100,200 UNION ALLSELECT 'ls002-(200*350)',200,350 UNION ALLSELECT 'ls002-(220*320)',220,320;with tas(select a0,a1, substring(a1,1,charindex('-',a1)-1) as b1, a2,a3 --substring(a1,charindex('(',a1)+1, charindex('*',a1)-charindex('(',a1)-1) as b2, --substring(a1,charindex('*',a1)+1, charindex(')',a1)-charindex('*',a1)-1) as b3 from a),ttas(select t.a0, t.a1, b.b1, row_number() over(partition by t.a1 order by abs(t.a2-b.b2) + abs(t.a3 - b.b3)) as rownumfrom binner join t on b.b1 like t.b1 + '%')select a0,b1 as a1from tt where rownum = 1/*a0a10ls001-(920*120)1ls002-(220*320)*/
- 在论坛中出现的比较难的sql问题:30(row_number函数 物料组合问题)
- 在论坛中出现的比较难的sql问题:2(row_number函数+子查询)
- 在论坛中出现的比较难的sql问题:3(row_number函数 分组查询)
- 在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题)
- 在论坛中出现的比较难的sql问题:19(row_number函数 行转列、sql语句记流水)
- 在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)
- 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)
- 在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算)
- 在论坛中出现的比较难的sql问题:29(row_number函数 组内某列的值连续出现3次标记出来)
- 在论坛中出现的比较难的sql问题:8(递归问题 树形结构分组)
- 在论坛中出现的比较难的sql问题:12(递归问题2 拆分字符串)
- 在论坛中出现的比较难的sql问题:23(随机填充问题)
- 在论坛中出现的比较难的sql问题:33(递归 连续日期问题 )
- 在论坛中出现的比较难的sql问题:34(递归 获取连续值问题)
- 在论坛中出现的比较难的sql问题:35(时间间隔计算问题)
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
- 在论坛中出现的比较难的sql问题:16(取一个字段中的数字)
- 在论坛中出现的比较难的sql问题:17(字符分拆2)
- apache2.4 和php 开启gzip功能
- 电信SMGP协议,基于开源的jar文件smgpapi20100113.jar进行实现
- 判断一个产品是否是一个可配置产品的子产品
- Android Log 工具类
- 程序测试概论与单元测试详解
- 在论坛中出现的比较难的sql问题:30(row_number函数 物料组合问题)
- UILabel的使用及常用属性的设置
- (转)Android10_Intent及其七大属性及intent-filter设置
- 【转】SSH 协议与OpenSSH详解
- HP-Unix Top命令总结
- Lucene索引,查询及高亮显示
- Android新组件CoordinatorLayout协调布局的使用,结合TabLayout,结合DrawerLayout
- FLV文件格式解析
- ionic对话框