一个有难度的SQL查询求助写法

quanjishou 2013-01-23 03:56:10
有难度的查询,向各位高手求助:有2个SQL表,1个是【参数表】,1个是【数据表】,需要根据【参数表】的约定,生成【分类结果】

说明:
1、如果某笔数据即符合参数表的多条记录,以【分类】字段的最大的那条记录为准,如果【分类】字段也相同,以【顺序】字段最大的为准。
2、参数表有几百条记录,数据表有10万条记录,希望能够在尽量短的时间查询到结果。

参数表:
分类 金额1 金额2 类型1 类型2 顺序
01 0 10 a b 1
01 11 9999 a c 2
02 0 20 b a 3
03 21 999 a a 4

数据表:根据金额、类型1、类型2这3个字段,select出分类结果:
人员编号 姓名 金额 类型1 类型2 分类结果
001 张三 5 a b 01
002 李四 20 a a 03
003 王五 20 b b null

谢谢!
...全文
264 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
skgybaby 2013-01-23
  • 打赏
  • 举报
回复
12楼正解!
Andy-W 2013-01-23
  • 打赏
  • 举报
回复
引用
还要注明一下:参数表中,金额1、金额2、类型1、类型2,均有可能为NULL值,如果为NULL值,则视为可替代任意值。(例如假设 金额1、金额2、类型1、类型2 这4个字段均为NULL值,则所有的数据表都符合这条记录)
如果数据条件满足2个参数表条件 如何取? select a.人员编号 ,a.姓名 ,a.金额 ,a.类型1 ,a.类型2 b.分类 as 分类结果 from 【数据表】 a outer apply(select top (1) x.分类 from 【参数表】 x where isnull(x.类型1,a.类型1)=a.类型1 and isnull(x.类型2,a.类型2) = a.类型2 and a.金额 between isnull(x.金额1,a.金额) and isnull(x.金额2,a.金额) order by x.类型1 desc ,x.类型1 desc ,x.金额1 desc ,x.金额2 desc ) b
Andy-W 2013-01-23
  • 打赏
  • 举报
回复
可以这样: select a.人员编号 ,a.姓名 ,a.金额 ,a.类型1 ,a.类型2 b.分类 as 分类结果 from 【数据表】 a left join 【参数表】 b on b.类型1 = a.类型1 and b.类型2 = a.类型2 and a.金额 between b金额1. and b.金额2
qmz2007 2013-01-23
  • 打赏
  • 举报
回复
Select *,分类结果=(Select top 1 fl From t_cashu as C Where C.lx1=J.lx1 And C.lx2=J.lx2 And C.JE>=J.JE1 And C.JE<=J.JE2 order by sx desc ) From t_jilu表 as J
qmz2007 2013-01-23
  • 打赏
  • 举报
回复
Select *,分类结果=(Select top 1 fl From t_cashu as C Where C.lx1=J.lx1 And C.lx2=J.lx2 order by sx desc ) From t_jilu表 as J
quanjishou 2013-01-23
  • 打赏
  • 举报
回复
还要注明一下:参数表中,金额1、金额2、类型1、类型2,均有可能为NULL值,如果为NULL值,则视为可替代任意值。(例如假设 金额1、金额2、类型1、类型2 这4个字段均为NULL值,则所有的数据表都符合这条记录)
quanjishou 2013-01-23
  • 打赏
  • 举报
回复
改了改了
昵称被占用了 2013-01-23
  • 打赏
  • 举报
回复
引用 5 楼 DVD_01 的回复:
002那行,为什么分类结果为03, 002的金额是20,而03分类的金额1 和金额 2 分别是 21 和999
同问 ,自己先把需求理清楚
quanjishou 2013-01-23
  • 打赏
  • 举报
回复
对不起,重新上传EXCEL图,以此图为准。
quanjishou 2013-01-23
  • 打赏
  • 举报
回复
对不起,我弄错了。那一行的金额应该是30
Andy-W 2013-01-23
  • 打赏
  • 举报
回复
002那行,为什么分类结果为03, 002的金额是20,而03分类的金额1 和金额 2 分别是 21 和999
quanjishou 2013-01-23
  • 打赏
  • 举报
回复
再请问一下,用什么代码来检测参数表可能重合的记录?
quanjishou 2013-01-23
  • 打赏
  • 举报
回复
当参数表设置的不合理时,就有可能出现重合条件的情况。 例如我再增加第5条参数记录: 04 50 500 a a 5 当数据表的金额为50-500时,这条记录和第4条记录就会重合,此时,以第5条数据的分类为准。
shoppo0505 2013-01-23
  • 打赏
  • 举报
回复
如果某笔数据即符合参数表的多条记录 是什么意思?
quanjishou 2013-01-23
  • 打赏
  • 举报
回复
排版乱了,上传EXCEL格式

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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