2011-11-06 86 views
0

我正在使用SQL Server MS。 我无法写这个剧本:SQL - 计算列使用ISNULL,DATEDIFF和GETDATE

CREATE VIEW rental_view 
AS SELECT 
    m.movie_id, movie_name, co.copy_id, f.format_id, format_name, cu.customer_id, 
(first_name + ' ' + surname) AS customer_name, rental_id, rental_date, 
return_date, ISNULL(return_date, DATEDIFF(dd, rental_date, GETDATE())) 
AS rental_duration 
FROM movie AS m INNER JOIN copy AS co 
ON m.movie_id = co.movie_id 
INNER JOIN format AS f 
ON co.format_id = f.format_id 
INNER JOIN rental 
ON co.copy_id = rental.copy_id 
INNER JOIN customer AS cu 
ON rental.customer_id = cu.customer_id 

的目标,这是建立在选择指定的列的视图。指定的最后一列是一个计算列,它应该计算出租超出其出租日期的天数(仅当return_date值为NULL时)并将其显示为INT。 据我所知,我在正确的轨道上,但显然不是,因为当执行该列中显示的值是DATATIME数据类型值,并没有任何意义。

感谢任何帮助,我可以得到。

回答

1

也许像这样的东西会为你工作。如果该值为NULL,则比较假日期01-01-1900,然后返回DATEDIFF或零值。

CASE ISNULL(return_date,'19000101') 
    WHEN '19000101' THEN DATEDIFF(dd, rental_date, GETDATE()) 
    ELSE 0 END 
+0

我不能够感谢你,完美的作品:) – Owen