我的场景并不很难。基本上,我有两张桌子,我需要通过一个PK和一个日期加入他们,事情是薪水表每个月付款都有一个日期,而第二个叫做奖金的表格只有一个年度奖金的日期,必须是与宣布年度奖金之日的薪水挂钩,但直到明年奖金。SQL Server 2008按日期加入获取正确的值
知道了,只是你给了你一个想法,这是你如何检查表。 工资表:
样本数据:
DateHist; NumSalarie; ValeurMontant; ChargePatronal; ChargesSalariales
2012-10-31 00:00:00.000; 1; 3519; 1322; 766,49 2012-11-30 00:00:00.000; 1; 3519; 1322; 766,49 2012-12-31 00:00:00.000; 1; 3519; 1322; 766,49 2013-01- 31 00:00:00.000; 1; 3519; 1395,15; 867,84 2013-02-28 00:00:00.000; 1; 3592,33; 1936,78; 1157,09 2013-03-31 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2013-04-30 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2013-05-31 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2013-06-30 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2013-07-31 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2013-08-31 00:00:00.000; 1; 3592,33; 1202,4; 765,41 2013-09-30 00:00:00.000; 1; 3592,33; 1385,19; 862,52 2013-10-31 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2013-11-30 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2013-12-31 00:00:00.000; 1; 3592,33; 1423,23; 882,85 2014-01-31 00:00:00.000; 1; 3592,33; 1439,35; 897,52 2014-02-28 00:00:00.000; 1; 3592,33; 1825,8; 1104,15 2014年 - 03-31 00:00:00.000; 1; 3666,67; 2858,27; 1656,17 2014-04-30 00:00:00.000; 1; 3666,67; 1468,1; 912,89 2014- 05-31 00:00:00.000; 1; 3666,67; 1468,1; 912,89
奖金表:
样本数据:
CodeRubrique; NumSalarie; ValeurMontant ; DateHist
1200; 1; 1267; 2013-02-28 00:00:00.000 1200; 1; 3448,64; 20 14-03-31 00:00:00.000 1200; 1; 3633; 2015-03-31 00:00:00.000 1200; 1; 2244; 2015-09-30 00:00:00.000 1200; 1; 4042 84,2016年10月31日00:00:00.000
所以,现在当我加入这两个表我在T-SQL做:
SELECT
salpaid.DateHist,
salpaid.NumSalarie,
salpaid.ValeurMontant,
bonus.ValeurMontant AS bonus
FROM
(select CodeRubrique,NumSalarie,ValeurMontant,DateHist
FROM table) salpaid
LEFT JOIN
(select CodeRubrique,NumSalarie,ValeurMontant,DateHist
FROM T_HBNS
WHERE CodeRubrique='1200') bonus
ON salpaid.NumSalarie=bonus.NumSalarie
AND salpaid.DateHist >= bonus.DateHist
所以,这里是我的问题。事情是,日期加入它是不正确的,因为当一个完整的第一年奖金的结果,然后我在第一年奖金连接两次后的日期。前一年奖金和当前奖金。只是你们展示我的输出:
正如你可以看到线73之前支付已经在奖金NULL,因为第一个注册的奖金是那么线74和87都OK之间的日期之后。当我获得第二年奖金时,噩梦来了,因为我在右边的奖励类别中获得了一个链接,但是我还有另外一个与前一年奖金的链接,您可以在88行后面看到。
我应该如何改进我的代码得到正确的JOIN?
谢谢你们
工资表缺少头 – scsimon
这里是一个伟大的地方开始。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/你也应该指定你正在使用哪个DBMS作为mysql <> sql server 。 –
样本数据最好用作DDL + DML。图像是最糟糕的。 –