2013-02-25 77 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