0

我有以下代码:

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date)
  FROM t1 a
  LEFT JOIN t1 b ON a.accNumber=b.accNumber 
  LEFT JOIN t1 ON a.accountId = t2.accountId
  WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber
  GROUP BY a.accNumber, a.Rest, t2.Owner
  ORDER BY t2.Owner

我想减去第 5 列和第 4 列中的日期(MIN(b.Date) - dateadd(day,1,MIN(a.Date)))并将其作为第 6 列,但由于 LEFT JOIN,简单DATEDIFF(day, dateadd(day,1,MIN(a.Date)), MIN(b.Date))不起作用。

在此处输入图像描述

这就是它应该的样子。使用当前代码,我只能看到前 5 列,我也想看到第 6 列

在此处输入图像描述

DATEDIFF(day, 4, 5)这就是我添加到 Select 语句时的样子

4

2 回答 2

0

我不是 100% 确定我理解这个问题,但我可以在短期内给你一个解决方案。这将使您继续开发,并且您可以稍后找出问题所在。

假设您发布的查询正常工作,正如您的评论所说,您可以将其视为表格。

您的查询是

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date)
  FROM t1 a
  LEFT JOIN t1 b ON a.accNumber=b.accNumber 
  LEFT JOIN t1 ON a.accountId = t2.accountId
  WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber
  GROUP BY a.accNumber, a.Rest, t2.Owner
  ORDER BY t2.Owner

命名列,并将其包装在另一个 SELECT 语句中。这些方面的东西应该起作用。

SELECT Owner, accNumber, Rest, Good_name, Another_good_name, 
       Another_good_name - Good_name Yet_a_third_good_name
FROM
    (SELECT t2.Owner, a.accNumber, a.Rest, 
            dateadd(day,1,MIN(a.Date)) Good_name, MIN(b.Date) Another_good_name
     FROM t1 a
     LEFT JOIN t1 b ON a.accNumber=b.accNumber 
     LEFT JOIN t1 ON a.accountId = t2.accountId
     WHERE a.Date<b.Date 
       AND a.Rest<>0 
       AND a.accNumber=b.accNumber
     GROUP BY a.accNumber, a.Rest, t2.Owner
     ORDER BY t2.Owner) AS Good_table_name

另一种方法是从您的第一个查询中创建一个视图,然后从该视图中进行选择。

由于您的示例中没有任何 NULL,并且您没有提及它们,因此我假设您知道如何处理 NULL。

于 2013-10-28T10:39:37.700 回答
0

在这种情况下,您应该使用ISNULLSQL Server 的功能,NULL因为LEFT JOIN.

从您的问题中不清楚您想做什么,但可以这样使用:

ISNULL(MIN(a.Date), 0)

或者

MIN(ISNULL(a.Date, 0))

参考:http ://technet.microsoft.com/en-us/library/ms184325.aspx

于 2013-10-28T10:35:04.927 回答