拆分以下SQL语句

时间:2014-08-16 07:31:30

标签: sql sql-server asp-classic

我真的需要以下帮助。

select
DATEADD(month,DATEDIFF(month,'20010101',DATEADD(day,-10,[Date])),'20010111')
    as PeriodStart, SUM(pay) as total
from
    Payroll
where
[Date] between
    DATEADD(month,DATEDIFF(month,'20010101',DATEADD(day,-10
                                           ,CURRENT_TIMESTAMP))
                                ,'20001211') and
    DATEADD(month,DATEDIFF(month,'20010101',DATEADD(day,-10
                                           ,CURRENT_TIMESTAMP))
                                ,'20010210') AND (email = 'xx@.xx.com')
group by
DATEADD(month,DATEDIFF(month,'20010101',DATEADD(day,-10,[Date])),'20010111')
order by
DATEADD(month,DATEDIFF(month,'20010101',DATEADD(day,-10,[Date])),'20010111')

基本上我拥有的是2张桌子(工资单和历史记录)。在工资表中,我有以下项目,日期支付用户名timeon timeoff。在历史表中,这些列是一年中的月份JAN FEB MAR APR等。

当用户输入他的timeon和timeoff详细信息时,他还会在pay列中输入一个值(如果有,则为0),以及日期。所以表格的典型行是:

Date           username      timeon    timeoff    pay
10/08/2014     xx@xx.com     08:00     10:00      60
11/08/2014     xx@xx.com     09:00     19:00      70
12/08/2014     xx@xx.com     07:00     18:00      60
14/08/2014     xx@xx.com     06:00     17:00      90
etc...

当用户提交了详细信息时,上面的脚本会读取总薪资,并使用当月的总数来更新历史记录表。 (这是在单独的脚本中完成的)此脚本中的信息由数组收集。我需要帮助的原因之一

最重要的是,我们的工资单从月的11号开始运行到下个月的10号,这就是上面的SQL代码所做的事情。它查找从11日到10日的所有支付值,并将其总计为总和。它还为我提供了上个月(2014年7月11日至2014年8月10日)的价值。输出视图如下所示:

PeriodStart    total
2014-07-11     180       (Previous month)
2014-08-11     45        (This month)

上个月是2014年7月11日 - 2014年8月10日 本月是2014年8月11日 - 2014年9月10日

我需要的是重写上面的代码以给我4个单独的变量。作为一个例子,变量名可以是 - previous_month,ptotal,this_month,ttotal这些4个变量然后可以用在我的经典asp编码中。

如果将上述SQL语句拆分为2个单独的语句更容易,那就没问题了。

我正试图摆脱在我的经典ASP代码中使用数组,因为当我有一个新用户时会抛出错误。我也会发现使用变量比使用数组更容易。

1 个答案:

答案 0 :(得分:1)

根据@Damien_The_Unbeliever的评论:

Best way to display correct value after a specific date Classic ASP SQL?,你不能从记录集本身获得4个变量吗?类似的东西:

set rs= ....

if not rs.eof then
     previous_month = Month(rs("PeriodStart"))
     ptotal = rs("total")

     rs.moveNext

     this_month = Month(rs("PeriodStart"))
     ttotal = rs("total")

end if