其中一个SQL语句实践例子-找到最新的两个促销和工资

其中一个SQL语句实践例子-找到最新的两个促销和工资
复制代码代码如下所示:
-程序员正在写一份员工报告,他们需要获得关于每个雇员当前和历史工资的信息。
-为了生成报告,报告需要显示晋升日期和每个人的工资数。
如果每个工资信息放在结果集的一行中,主机程序就格式化了。
-应用程序的程序员是一群懒惰的人,他们需要在雇员的一条线上获得电流。
-和历史工资信息。这允许你编写一个非常简单的循环语句。
-例子:
创建表的工资
(姓名nvarchar(50)不为空,
sal_date日期不为空,
薪水不等于零,


修改表{ DBO }。工资加约束pk_salaries } {主键聚集

名字,sal_date ASC
)和(pad_index =关闭,statistics_norecompute =关闭,
sort_in_tempdb =关闭,ignore_dup_key =,= =在网上了,allow_row_locks,
allow_page_locks =对{原})


——插入数据
插入的薪水
select'tom ','2010-1-20 ',2000
联盟
select'tom ','2010-6-20 ',2300
联盟
select'tom ','2010-12-20 ',3000
联盟
select'tom ','2011-6-20 ',4000
联盟
select'dick ','2011-6-20 ',2000
联盟
select'harry ','2010-6-20 ',2000
联盟
select'harry ','2011-6-20 ',2000



----方法1,使用左连接连接进行查询(SQL 2000及以上)
选择b.name,b.maxdate,y.salary,b.maxdate2,z.salary
从(选择a.name,a.maxdate,max(x.sal_date)作为maxdate2
从(选择w.name,max(w.sal_date)作为maxdate
工资从W
集团通过w.name)作为
左外连接的工资X a.name =结构和a.maxdate > x.sal_date
集团通过a.name,a.maxdate)为B
左外连接工资为y
在b.name = y.name和b.maxdate = y.sal_date
左外部连接工资为z
在b.name = z.name和b.maxdate2 = z.sal_date


-方法二。这种方法是对每个雇员的线路进行编号,然后选择两个雇佣日期的最新日期,

---(超过2005个版本的SQL)
Select s1.name,
马克斯(在Rn = 1然后sal_date别的空端)为curr_date,
马克斯(在Rn = 1然后工资其他空端)为curr_salary,
马克斯(在Rn = 2然后sal_date别的空端)为prev_date,
马克斯(在Rn = 2然后工资其他空端)为curr_salary
从(选择的名字,sal_date,工资等级()在(分区的名字顺序
从工资
)S1 Rn<3组s1.name

-方法三,此方法可在以SQL Server 2005版本以CTE的方式实现之后使用
与热膨胀系数(名称、sal_date,sal_amt,RN)
作为

选择的名字,sal_date,工资,row_number()在(由sal_date姓名顺序划分)

选择o.name,o.sal_date作为curr_date,o.sal_amt作为curr_amt,i.sal_date作为prev_date。
左外连接CTE我o.name = I.姓名和i.rn = 2,o.rn = 1



——方法四。使用视图将问题分为两种情况

--- 1。只有一个工资变动的雇员

--- 2。有两个或两个以上工资变动的雇员
创建视图v_salaries
作为
选择a.name,a.sal_date,max(a.salary)从工资在工资、薪金
在a.sal_date <= b.sal_date和a.name = b.name组a.name,a.sal_date
计数(*)< = 2

选择a.name,a.sal_date,a.salary,b.sal_date,b.salary从v_salaries一
v_salaries B
在a.name = b.name和a.sal_date > b.sal_date
联盟的所有
选择名字,max(sal_date),最大(工资),铸造(空的日期),铸造(空))
从v_salaries
组的名称
有计数(*)=1


工资表

删除视图v_salaries
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部