日期:2014-05-17  浏览次数:20595 次

一个有难度的SQL查询求助写法
有难度的查询,向各位高手求助:有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

谢谢!
sql查询

------解决方案--------------------
002那行,为什么分类结果为03,
002的金额是20,而03分类的金额1 和金额 2 分别是 21 和999
------解决方案--------------------
引用:
002那行,为什么分类结果为03,
002的金额是20,而03分类的金额1 和金额 2 分别是 21 和999

同问
,自己先把需求理清楚
------解决方案--------------------
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 
------解决方案--------------------
引用
还要注明一下:参数表中,金额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
------解决方案--------------------
12楼正解!