从联合合并的两个查询中计算两个日期之间的天数差异
Calculate days difference between two dates from two queries conslidated by union
我有两个查询,它们之间有一个联合。我正在尝试计算两个日期之间的差异,其中一个在第一个查询中,另一个在第二个查询中。
第一个查询中的第一个日期是 t0.duedate
,第二个查询中的第二个日期是 t0.docdate
。
我将在 crystal 报告中使用此查询,我将在其中放置条件以根据字段 t0.[u_a_id] 对结果进行排序,这在两个查询中都可用
现在的结果是这样的
DocENTRY slpname DocNum SeriesName Series DocType DocDate DocdueDate CardCode CardName DocTotal u_a_id type
1 - 1 Primary 12 C 2006-01-31 00:00:00.000 2006-01-31 00:00:00.000 C20000 Norm Thompson 14023.800000 NULL A/R INCOMING PAYMENT
323 Sales Manager 323 Primary 1 I 2012-06-09 00:00:00.000 2012-07-09 00:00:00.000 C20000 Maxi-Teq 4253.250000 NULL A/R INVOICE
我需要再添加一列 need Days Difference,它将计算两个日期“2012-07-09 - 2006-01-31”之间的天数差异,如下所示:
Days Difference
1921 Day
这里是查询:
SELECT DISTINCT
t0.[DocENTRY] ,
oslp.slpname ,
t0.[DocNum] ,
nnm1.SeriesName ,
t0.[Series] ,
t0.[DocType] ,
t0.[DocDate] ,
t0.[DocdueDate] ,
t0.[CardCode] ,
t0.[CardName] ,
t0.[DocTotal] ,
t0.[u_a_id] ,
'A/R INVOICE' AS type
FROM OINV t0
INNER JOIN NNM1 ON nnm1.series = t0.Series
INNER JOIN OSLP ON oslp.slpcode = t0.slpcode
WHERE t0.DOCSTATUS = 'C'
UNION ALL
SELECT DISTINCT
t0.[DocENTRY] ,
'-' AS slpname ,
t0.[DocNum] ,
nnm1.SeriesName ,
t0.[Series] ,
t0.[DocType] ,
t0.[DocDate] ,
t0.[DocdueDate] ,
t0.[CardCode] ,
t0.[CardName] ,
t0.[DocTotal] ,
t0.[u_a_id] ,
'A/R INCOMING PAYMENT' AS type
FROM orct t0
INNER JOIN NNM1 ON nnm1.series = t0.Series
ORDER BY t0.[CardCode]
通过使用嵌套查询将第二个查询的日期带到第一个查询,然后在 CR 中制作了一个公式来计算日期之间的差异,
更新后立即查询:
select distinct T0.[DocENTRY],
T0.[DocNum],nnm1.SeriesName, T0.[Series],oslp.SlpName,
T0.[DocDate] as 'Invoice Date',T0.[DocDueDate], T0.[CardCode],
T0.[CardName], T0.[DocTotal], T0.[Comments],
'A/R invoice' as type, t0.U_A_ID,
(select docdate from ORCT where orct.U_A_ID = t0.U_A_ID)
as PaymentDt
from oinv t0
inner join NNM1 on nnm1.series =t0.Series
inner join OSLP on oslp.SlpCode =t0.SlpCode
where T0.DocStatus ='c'
union all
select distinct T0.[DocENTRY],
T0.[DocNum],nnm1.SeriesName, T0.[Series],
'_' AS SlpName, T0.[DocDate],
T0.[DocDueDate] AS 'Payment Due Date',
T0.[CardCode], T0.[CardName], T0.[DocTotal],
T0.[Comments],
'A/R Incoming Payment' as type, t0.U_A_ID , getdate() as paymentdt
from ORCT t0
inner join NNM1 on nnm1.series =t0.Series
order by t0.CardCode,t0.u_A_id
CR 中使用的公式是:
DATEDIFF("d",{Command.PaymentDt},{Command.DocDueDate})
我有两个查询,它们之间有一个联合。我正在尝试计算两个日期之间的差异,其中一个在第一个查询中,另一个在第二个查询中。
第一个查询中的第一个日期是 t0.duedate
,第二个查询中的第二个日期是 t0.docdate
。
我将在 crystal 报告中使用此查询,我将在其中放置条件以根据字段 t0.[u_a_id] 对结果进行排序,这在两个查询中都可用
现在的结果是这样的
DocENTRY slpname DocNum SeriesName Series DocType DocDate DocdueDate CardCode CardName DocTotal u_a_id type
1 - 1 Primary 12 C 2006-01-31 00:00:00.000 2006-01-31 00:00:00.000 C20000 Norm Thompson 14023.800000 NULL A/R INCOMING PAYMENT
323 Sales Manager 323 Primary 1 I 2012-06-09 00:00:00.000 2012-07-09 00:00:00.000 C20000 Maxi-Teq 4253.250000 NULL A/R INVOICE
我需要再添加一列 need Days Difference,它将计算两个日期“2012-07-09 - 2006-01-31”之间的天数差异,如下所示:
Days Difference
1921 Day
这里是查询:
SELECT DISTINCT
t0.[DocENTRY] ,
oslp.slpname ,
t0.[DocNum] ,
nnm1.SeriesName ,
t0.[Series] ,
t0.[DocType] ,
t0.[DocDate] ,
t0.[DocdueDate] ,
t0.[CardCode] ,
t0.[CardName] ,
t0.[DocTotal] ,
t0.[u_a_id] ,
'A/R INVOICE' AS type
FROM OINV t0
INNER JOIN NNM1 ON nnm1.series = t0.Series
INNER JOIN OSLP ON oslp.slpcode = t0.slpcode
WHERE t0.DOCSTATUS = 'C'
UNION ALL
SELECT DISTINCT
t0.[DocENTRY] ,
'-' AS slpname ,
t0.[DocNum] ,
nnm1.SeriesName ,
t0.[Series] ,
t0.[DocType] ,
t0.[DocDate] ,
t0.[DocdueDate] ,
t0.[CardCode] ,
t0.[CardName] ,
t0.[DocTotal] ,
t0.[u_a_id] ,
'A/R INCOMING PAYMENT' AS type
FROM orct t0
INNER JOIN NNM1 ON nnm1.series = t0.Series
ORDER BY t0.[CardCode]
通过使用嵌套查询将第二个查询的日期带到第一个查询,然后在 CR 中制作了一个公式来计算日期之间的差异, 更新后立即查询:
select distinct T0.[DocENTRY],
T0.[DocNum],nnm1.SeriesName, T0.[Series],oslp.SlpName,
T0.[DocDate] as 'Invoice Date',T0.[DocDueDate], T0.[CardCode],
T0.[CardName], T0.[DocTotal], T0.[Comments],
'A/R invoice' as type, t0.U_A_ID,
(select docdate from ORCT where orct.U_A_ID = t0.U_A_ID)
as PaymentDt
from oinv t0
inner join NNM1 on nnm1.series =t0.Series
inner join OSLP on oslp.SlpCode =t0.SlpCode
where T0.DocStatus ='c'
union all
select distinct T0.[DocENTRY],
T0.[DocNum],nnm1.SeriesName, T0.[Series],
'_' AS SlpName, T0.[DocDate],
T0.[DocDueDate] AS 'Payment Due Date',
T0.[CardCode], T0.[CardName], T0.[DocTotal],
T0.[Comments],
'A/R Incoming Payment' as type, t0.U_A_ID , getdate() as paymentdt
from ORCT t0
inner join NNM1 on nnm1.series =t0.Series
order by t0.CardCode,t0.u_A_id
CR 中使用的公式是:
DATEDIFF("d",{Command.PaymentDt},{Command.DocDueDate})