来自不同表的SQL计算列

时间:2013-02-21 01:55:20

标签: sql sql-server sql-server-2008

我试图在项目表中创建派生属性可用性,为了做到这一点,我需要创建一个连接吗?

可用性检查今天的日期是否在checkoutDate和Returndate之间。

这是ER图:

enter image description here

2 个答案:

答案 0 :(得分:2)

如果要将其用作计算列,那么我建议使用UDF。在您的图表中,您将Availability作为布尔值。 SQL Server没有布尔数据类型,所以我假设你有点意思。这应该非常接近,但你需要测试它:

CREATE FUNCTION dbo.GetValue
(
    @barcode int
)
RETURNS bit
AS
BEGIN
    DECLARE @field bit
     SELECT @field = CASE WHEN GETDATE() 
                BETWEEN L.LastReturnDate AND R.ReturnDate THEN 1 ELSE 0 END
       FROM [Item] I
        JOIN [Load] L ON I.barcode = L.barcode
        JOIN [Return] R ON I.barcode = R.barcode
       WHERE I.barcode = @barcode
      RETURN @field
END
GO

然后将其用作计算列:

ALTER TABLE dbo.Item
ADD Availability AS dbo.GetValue(barcode)

话虽如此,这可能更适合于View。

答案 1 :(得分:1)

是的,你需要加入。

我建议您使用视图将来自不同表的数据放在一起。