2013-02-25 3 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는 무엇입니까? –

+0

일 수 * 내 샘플 46의 용량은 일일 용량입니다. – wafw1971

답변

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

할 수는 있지만,하지는 않을 것입니다. 정규화의 일부는 계산 된 값을 저장하지 않는 것입니다. –

+1

@DanBracuk : 동의 함 - 그러나 ** 비정규 화 **의 일부는 * 작동하도록 만드는 것입니다. *이 값이 자주 필요하면 계산에 덜 악의적이고 (중복 적으로) 빠른 액세스를 위해 값을 저장할 수 있습니다. –

+0

안녕 Marc_s 솔루션의 두 번째 부분이 제대로 계산되지 않습니다. 예를 들어 46 Capacity for 153을 실행하면 합계가 7038이되어야하지만 솔루션을 사용하면 6992 만 얻는다고 할 수 있습니다. – wafw1971

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

뭔가?

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 
+0

안녕하세요 XLAnt 그게 바로 제가 고마워 한 것입니다. – wafw1971

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