2012-07-09 6 views
1

인터넷에 피벗 테이블 예제가 많이 있다는 것을 알고 있습니다. 그러나 SQL을 처음 접했고 모든 예제가 집계 함수와 관련되어있는 것처럼 보입니다.피벗 테이블의 문제

Table 1: 

|Date   | Tag |Value | 
|06/10 2:00pm | A | 65 | 
|06/10 2:00pm | B | 44 | 
|06/10 2:00pm | C | 33 | 
|06/10 2:02pm | A | 12 | 
|06/10 2:02pm | B | 55 | 
|06/10 2:02pm | C | 21 | 
.... 
|06/10 1:58am | A | 23 | 

나는 (표 2)처럼 보이게하고 싶은 것 :

|Date  | A | B | C | 
|06/10 2:00pm| 65 | 44 | 33 | 
|06/10 2:02pm| 12 | 55 | 21 | 
..... 
|06/10 1:58am| 23 | etc. | etc. | 

(형식 죄송합니다)

발생하는 일부 문제 (작동하지 않습니다 내가 온라인에서 찾은 코드) 테이블 1의이 데이터가 테이블 2로 지속적으로 이동되도록 2 분마다 저장 프로 시저 (SQL 작업)로 실행하고 싶습니다. 그러나 필자는 ~에 매일 데이트하는거야? (thats 구문 내가 본) 피벗 테이블 자체가 단순 해 보이지만 datetime 내 슬픔의 원인이되었습니다. 모든 코드 스 니펫이나 링크는 크게 감사하겠습니다.

감사합니다.

+0

은 해당 형식으로 저장되는 날짜입니까? '06/10 2:02 pm' 날짜 열의 데이터 유형은 무엇입니까? – Taryn

+0

날짜와 유형이 같은 행이 두 개 이상있는 경우 출력은 어떻게됩니까? 예를 들어'06/10 2:00 pm | A | 50 '. –

+0

@bluefeet 형식은 날짜 시간 스탬프와 같습니다 : 06-20-2012 00:02:13 am (저는 현재 제 앞에있는 형식이 없지만 꽤 가까이 있습니다) – akwarywo

답변

0

피벗 자체는 간단한데 :

저장 프로 시저에 관해서는
select * 
from table1 
pivot (min (Value) for Tag in ([A], [B], [C])) p 

, 내가있을 것이라고 믿고있어 불완전한 그룹 (제외 표에 대한 필터로 표 2에서 마지막으로 저장된 날짜를 사용하는 것,에 어떤 시점, 세 개의 태그가 모두 표시되며 마지막 날짜 만 불완전 할 수 있습니다. 그렇지 않은 경우 행을 업데이트/삽입하려면 마지막 날짜에 특별한 처리가 필요합니다.

그래서 코드 :

create proc InsertPivotedTags 
as 
    set NoCount ON 
    set XACT_ABORT ON 

    begin transaction 

    declare @startDate datetime 
    -- Last date from Table2 or start of time 
    select @startDate = isnull (max ([Date]), '1753-01-01') 
     from Table2 

    insert into Table2 
    select * 
     from Table1 
    pivot (min (Value) for Tag in ([A], [B], [C])) p 
    where [Date] > @startDate 
    -- exclude incomplete groups 
     and a is not null 
     and b is not null 
     and c is not null 

    commit transaction 

그룹은 불완전 할 수 있습니다 당신은 exlude 필터를 제거하고 불완전 경우 마지막 날짜를 제거하는 DELETE 문을 추가하고 얻을 @startDate 3 밀리 초 이전으로 조정해야하는 경우 같은 줄이 다시 채워지지만 이제는 더 많은 채워진 상태가됩니다.

관련 문제