2013-02-25 85 views
0

我知道這很容易,但我不記得該怎麼做,我有查詢,請參閱下面我要添加一個名爲總容量的新列,這是我的datediff結果*我的Capcity 。但對於我的生活,我無法弄清楚。你能幫我嗎?創建一個新的計算列

SELECT 
    Capacity.StartDate 
    ,Capacity.EndDate, DATEDIFF(d,Capacity.StartDate 
    ,Capacity.EndDate)+1 AS DaysOpen 
    ,Capacity.Capacity 
    ,Capacity.Site_Skey 
FROM 
    Capacity 

結果

StartDate EndDate  DaysOpen Capacity TotalCapacity 
    01/05/2010 30/09/2010 153  46  7038 
+0

是什麼TotalCapacity代表什麼? – 2013-02-25 13:46:32

+0

開放天數*容量,在我的樣本46中是每日容量。 – wafw1971 2013-02-25 13:47:17

回答

3

可這兩列輕鬆地添加到您的表格 - 爲計算,堅持列。然後,您可以輕鬆選擇它們 - 它們是表格中的新列,可以像其他列一樣選擇 - 如果需要,甚至可以在其上放置索引!

ALTER TABLE [dbo].[Capacity] 
    ADD DaysOpen AS DATEDIFF(d, StartDate, EndDate) PERSISTED 

ALTER TABLE [dbo].[Capacity] 
    ADD TotalCapacity AS DATEDIFF(d, StartDate, EndDate) * [Capacity] PERSISTED 

現在可以發出:

SELECT 
    StartDate, EndDate, 
    DaysOpen, 
    Capacity, 
    TotalCapacity 
FROM 
    Capacity 

更新:,如果你想使用DATEDIFF+1方法 - 使用這些柱規格:

ALTER TABLE [dbo].[Capacity] 
    ADD DaysOpen AS (DATEDIFF(d, StartDate, EndDate) + 1) PERSISTED 

ALTER TABLE [dbo].[Capacity] 
    ADD TotalCapacity AS (DATEDIFF(d, StartDate, EndDate) + 1) * [Capacity] PERSISTED 
+0

你可以,但我不會。標準化的一部分是不存儲計算值。 – 2013-02-25 13:58:09

+1

@DanBracuk:同意 - 但**反常化**的一部分是*使其工作*,並且如果您經常需要這些值,那麼計算和(重複)存儲這些值以便快速訪問可能是較小的惡意... – 2013-02-25 13:59:36

+0

嗨Marc_s 解決方案的第二部分計算不正確,例如,當我運行它46容量爲153總計應該是7038,但使用您的解決方案,我只得到6992? – wafw1971 2013-02-25 14:09:45

2
SELECT 
    Capacity.StartDate 
    ,Capacity.EndDate 
    ,DATEDIFF(d,Capacity.StartDate ,Capacity.EndDate)+1 AS DaysOpen 
    ,Capacity.Capacity 
    ,(DATEDIFF(d,Capacity.StartDate ,Capacity.EndDate)+1) * Capacity.Capcity as TotalCapacity 
    ,Capacity.Site_Skey 
FROM 
    Capacity 
2

像這樣的事情?

​​
+0

嗨XLAnt 這正是我需要的感謝。 – wafw1971 2013-02-25 13:49:26

1
SELECT 
    Capacity.StartDate 
    ,Capacity.EndDate 
    ,DATEDIFF(d,Capacity.StartDate 
    ,Capacity.EndDate)+1 AS DaysOpen 
    ,Capacity.Capacity 
    ,Capacity.Site_Skey 
    ,(DATEDIFF(d,Capacity.StartDate 
    ,Capacity.EndDate)+1) * Capacity.Capacity 
FROM 
    Capacity