我在两个表之间有一个交叉连接,我需要一组条件的PayrollOID。我已经尝试在WHERE子句中的CASE语句,CASE和IIF语句中执行此操作,现在在常规代码中实现我将不得不做另一个传递来摆脱空白。
根据批准日期,我有工作批准转到工资单。我们正在将其更改为输入批准的日期。
如果Apr_Entered是> = JobPayStart和Apr_Entered< = TimesheetsDue和JobEndDate> = JobPayStart和JobEndDate< = JobPayEnd - 给我那个OID。不要寻找其他任何东西。
否则 - 我希望在Apr_Entered为> = JobPayStart和Apr_Entered< = JobPayEnd的情况下支付工作。
我收到错误:函数参数列表出错:'>'未识别。无法解析查询文本。
但确实有效。然而,我正在获得重复项,其中两个括号都显示为重叠作业。
我需要帮助收紧我的书挡 - 所以当第一次被发现时就会离开。我还需要知道为什么在将datetime字段转换为Date以进行比较时仍然会出现错误。
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
答案 0 :(得分:0)
这里有很多猜测工作,但SQL需要整洁。我看不出你的SQL有什么问题,&#34; per-say&#34;但你通过将日期转换为varchar
来解决问题。例如,在varchar
中,'11/11/2016'
日期 AFTER 01/01/2018'
是的,那是对的,我说过了。这是因为1&gt; 0(varchar
的第一个字符首先用于排序,然后用于第二个等,等等。)
无论如何,这是一个更整洁的SQL版本,而是使用CASE
表达式。显然,这是完全未经测试的。您真正需要做的是发布一些Sample数据,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 ...;
如果这对您没有帮助,请查看http://sqlfiddle.com/#!9/53d3c/52/0