Sql 创建新的计算列
我知道这很容易,但我不记得怎么做了,我想在下面添加一个新列,名为Total Capacity,这是我的datediff结果*我的Capcity。但就我的一生而言,我无法理解它。你能帮忙吗Sql 创建新的计算列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我知道这很容易,但我不记得怎么做了,我想在下面添加一个新列,名为Total Capacity,这是我的datediff结果*我的Capcity。但就我的一生而言,我无法理解它。你能帮忙吗 SELECT Capacity.StartDate ,Capacity.EndDate, DATEDIFF(d,Capacity.StartDate ,Capacity.EndDate)+1 AS DaysOpen ,Capacity.Capacity ,Capacity.Site_Skey
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
像这样的
SELECT
Capacity.StartDate
,Capacity.EndDate
,DATEDIFF(d, Capacity.StartDate, Capacity.EndDate) + 1 AS DaysOpen
,Capacity.Capacity
,(DATEDIFF(d, Capacity.StartDate, Capacity.EndDate) + 1) * Capacity.Capacity AS TotalCapacity
FROM
Capacity
您可以轻松地将这两列添加到表中,即计算的、持久化的列。然后,您就可以轻松地选择它们——它们是表中的新列,您可以像其他列一样进行选择——如果需要,您甚至可以在它们上添加索引
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
TotalCapacity代表什么?开放天数*容量,在我的示例46中是每日容量。你可以,但我不会。规范化的一部分是不存储计算的值。@DanBracuk:同意-但反规范化的一部分是使其工作,如果您经常需要这些值,那么计算并(冗余地)存储这些值以供快速访问可能不是那么糟糕。……嗨,Marc_,您的解决方案的第二部分计算不正确,例如,当我以46个容量运行153次时,总容量应该是7038次,但使用您的解决方案,我只得到6992次?@wafw1971:
DATEDIFF
对于您给出的这两个日期是152次(而不是您使用的153次)。因此,根据您的定义,您可能需要在DaysOpen
和TotalCapacity
计算列的规范中使用DATEDIFF()+1
。您好,Marc,我确实将+1添加到了第一个解决方案中,这是我唯一在EndDate之后和*[Capacity]之前添加+1的第二个解决方案我得到了不正确的结果。谢谢
SELECT
StartDate, EndDate,
DaysOpen,
Capacity,
TotalCapacity
FROM
Capacity
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