我有以下代码:
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语句
答案 0 :(得分:0)
在这种情况下,您应该使用ISNULL
SQL Server的功能,因为NULL
会使用LEFT JOIN
。
从你的问题来看,目前尚不清楚你想做什么,但可以这样使用:
ISNULL(MIN(a.Date), 0)
或
MIN(ISNULL(a.Date, 0))
答案 1 :(得分: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。