Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据union定义的两个查询计算两个日期之间的天数差_Sql_Sql Server_Date_Union_Union All - Fatal编程技术网

Sql 根据union定义的两个查询计算两个日期之间的天数差

Sql 根据union定义的两个查询计算两个日期之间的天数差,sql,sql-server,date,union,union-all,Sql,Sql Server,Date,Union,Union All,我有两个查询,它们之间都有一个并集。我试图计算两个日期之间的差异,其中一个在第一个查询中,另一个在第二个查询中 第一次查询中的第一个日期是t0.duedate,第二次查询中的第二个日期是t0.docdate。 我将在crystal report中使用此查询,其中我将根据字段t0。[u\u a\u id]设置一个条件,以便对重新替换进行排序,该字段在两个查询中都可用 现在的恢复是这样的 DocENTRY slpname DocNum SeriesName Series DocType

我有两个查询,它们之间都有一个并集。我试图计算两个日期之间的差异,其中一个在第一个查询中,另一个在第二个查询中

第一次查询中的第一个日期是
t0.duedate
,第二次查询中的第二个日期是
t0.docdate
。 我将在crystal report中使用此查询,其中我将根据字段t0。[u\u a\u 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
我还需要一个列“需要天数差异”,它将计算两个日期“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})

请用示例数据和所需结果编辑您的问题。联合是错误的方式,您需要加入@jarlh-不一定;这取决于OP试图做什么。@MarkBannister,是的,当然,在某些情况下,联合会会非常方便。我很快要做的是应用这个函数DATEDIFF(DAY,t0.[DocdueDate],t0.[DocDate]),其中第一个日期来自第一个查询,第二个日期来自第二个查询,然后将重新分配到一个新的coulmn中