2013-02-21 88 views
1

我試圖在項目表中創建派生屬性可用性,爲了做到這一點,我需要創建一個連接?來自不同表的SQL計算Colums

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

這裏是ER圖:

enter image description here

+0

@MahmoudGamal SQL Server 2008和er圖創建 – Dynamiite 2013-02-21 02:04:33

回答

2

如果你想用它作爲計算列,那麼我會推薦使用UDF。在你的圖中,你有可用性作爲布爾值。 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) 

隨着中說,這可能是更適合於瀏覽。

+0

ALTER TABLE dbo.Item ADD Availability AS dbo.GetValue(barcode)給我出現以下錯誤消息2705,級別16,狀態5,行1 每個表中的列名必須唯一。表'dbo.Item'中的列名'可用性'被多次指定。 – Dynamiite 2013-02-24 00:52:46

+1

@Sebastian - 不幸的是,你不能改變現有的列 - 你收到的錯誤是因爲上面的嘗試添加一個新的列。你需要刪除並讀取該列 - 檢查這篇文章:http://stackoverflow.com/questions/2372655/how-can-i-alter-this-computed-column-in-sql-server-2008 - 祝你好運! – sgeddes 2013-02-24 00:58:13

+0

感謝哥們,它工作 – Dynamiite 2013-02-24 01:23:45

1

是的,你需要做一個連接。

我建議您使用視圖來放置不同表中的數據。

+0

好吧,謝謝,我在這種情況下使用什麼類型的連接? – Dynamiite 2013-02-21 02:13:35

+0

@塞巴斯蒂安。 。 。你有沒有嘗試過任何疑問?你應該在你的問題中包含這樣一個查詢。 – 2013-02-21 02:15:42

+0

不,我還沒有嘗試過這種情況下的任何疑問。我會在下次發佈問題時記住這一點。 – Dynamiite 2013-02-21 02:18:29