-1

我在两个表之间有一个交叉连接,我需要 PayrollOID 来满足一组条件。我曾尝试在 WHERE 子句中的 CASE 语句、CASE 和 IIF 语句中执行此操作,现在在常规代码中,我意识到我将不得不再做一遍以摆脱空洞。

我有根据批准日期进入工资单的工作批准。我们将其更改为输入批准的日期。

如果 Apr_Entered >= JobPayStart and Apr_Entered <= TimesheetsDue and JobEndDate >= JobPayStart and JobEndDate <=JobPayEnd - 给我那个 OID。不要寻找其他任何东西。

否则 - 我希望在 Apr_Entered >= JobPayStart 和 Apr_Entered <= JobPayEnd 的情况下支付工作报酬。

我收到一个错误:函数参数列表中的错误:“>”无法识别。无法解析查询文本。

但它确实运行。然而,我得到重复,其中两个括号都显示为重叠作业。

我需要帮助收紧我的书挡——所以当第一个被发现的时候就出去。我还需要知道为什么在将日期时间字段转换为日期以进行比较时仍然出现错误。

IIF(CONVERT(varchar(10), ProtoPayroll.AprEntered,110) >= CONVERT(varchar(10), PayDates.PayStartDate,110)
AND CONVERT(varchar(10), ProtoPayroll.AprEntered,110) <= CONVERT(varchar(10), PayDates.TimesheetsDue,110)
AND CONVERT(varchar(10), ProtoPayroll.JobEndDate,110) >= CONVERT(varchar(10), PayDates.PayStartDate,110)
AND CONVERT(varchar(10), ProtoPayroll.JobEndDate,110) <= CONVERT(varchar(10), PayDates.PayEndDate,110), 
    --First IIF's result
    CONVERT(nvarchar(40), dbo.Paydates.OID),
    --Now another IIF
    IIF (CONVERT(varchar(10), ProtoPayroll.AprEntered,110) >= CONVERT(varchar(10), PayDates.PayStartDate,110)
    AND CONVERT(varchar(10), ProtoPayroll.AprEntered,110) <= CONVERT(varchar(10), PayDates.PayEndDate,110),
    --Second IIF's results
    CONVERT(nvarchar(40), dbo.Paydates.OID), SPACE(40))) AS PayrollOID
4

1 回答 1

0

这里有很多猜测工作,但 SQL 需要整理一下。我看不出你的 SQL 有什么问题,“per-say”,但你通过将日期转换为varchar. 举个例子,在varchar日期'11/11/2016'之后 01/01/2018'是的,没错,我说之后。那是因为 1 > 0 (的第一个字符首先varchar用于排序,然后是第二个,等等)。

无论如何,这是一个更简洁的 SQL 版本,CASE而是使用表达式。显然,这是完全未经测试的。您真正需要做的是发布一些示例数据、DDL 和您的预期结果集。您实际上并没有在这里提出问题,您只是告诉我们您的目标并说您遇到错误(我们无法复制)。

SELECT CASE WHEN PP.AprEntered >= PD.PayStartDate
             AND PP.AprEntered <= PD.TimesheetsDue
             AND PP.JobEndDate >= PD.PayStartDate
             AND PP.JobEndDate <= PD.PayEndDate THEN CONVERT(nvarchar(40), PD.OID)
            WHEN PP.AprEntered >= PD.PayStartDate
             AND PP.AprEntered <= PD.PayEndDate THEN CONVERT(nvarchar(40), PD.OID)
            ELSE SPACE(40)
       END AS YourColumn
FROM ProtoPayroll PP 
     JOIN PayDates PD ON --JOIN Criteria
WHERE ...;

如果这对您没有帮助,请查看如何提问

于 2017-12-21T19:21:33.380 回答