2017-12-29 21 views
-1

아래 "결과보기"를 얻기 위해 누군가가 "보기 만들기"코드로 나를 도울 수 있습니까? AS VIEW의 MYVIEW을 만들다음 또는 이전 레코드에 대한 정보가 포함 된보기를 만들려면 어떻게해야합니까?

(운동 FROM ..... SELECT ...)

이 같은 테이블 "운동"이 :

 
ID name City  from date 
U1 Smith New York 1 jan 2000 
U1 Smith Austin  1 dec 2001 
U1 Smith Scottsdale 1 jul 2002 
U2 Jack Houston  1 sep 2000 
U2 Jack New York 1 nov 2000 
U3 Jane Knoxville 1 feb 2000 
U3 Jane Richmond 1 mrt 2001 
U3 Jane San Diego 1 jan 2002 
U3 Jane Oak Park 1 oct 2004 

내가의 전망을하고 싶습니다 사람의 움직임.

나는 2 개의 결과 집합을 가질 수 있습니다. 처음에는 열 수 제한이 있습니다.

내가 각 결과에 대한 전망이 좋아 설정

결과 집합 1 :

 
ID name city 1  city 2 city 3  city 4 
U1 Smith New York Austin Scottsdale  
U2 Jack Houton  New York   
U3 Jane Knoxville Richmond San Diego Oak Park 

또는

Resultset2

 
ID name City  from date to city 
U1 Smith New York 1 jan 2000 Austin 
U1 Smith Austin  1 dec 2001 Scottsdale 
U1 Smith Scottsdale 1 jul 2002 
U2 Jack Houston  1 sep 2000 New York 
U2 Jack New York 1 nov 2000 
U3 Jane Knoxville 1 feb 2000 Richmond 
U3 Jane Richmond 1 mrt 2001 San Diego 
U3 Jane San Diego 1 jan 2002 Oak Park 
U3 Jane Oak Park 1 oct 2004 
+0

가 _ "내가보기를하고 싶다"필요하고 _ 계산하지 않는다 _ "나는이 결과 집합을 가질 수 있습니다." _ "처음에는 열 수 제한이 있습니다."_ 제한은 무엇입니까? 왜? –

+0

이 질문은 연구 노력을 보이지 않습니다. –

답변

0

당신은을 사용할 수 있습니다 결과 집합이

SELECT ID, 
     NAME, 
     City, 
     [from date], 
     toCity = Coalesce(Lead(City)over(Partition by ID, name order by [from date]),'') 
FROM Yourtable 

결과 집합윈도우 함수는 _ dynamic pivot

DECLARE @sql  NVARCHAR(max), 
     @col_list VARCHAR(max) 

SET @col_list =Stuff((SELECT DISTINCT ','+ Quotename('City '+ Cast(Row_number()OVER(partition BY ID ORDER BY [from date]) AS VARCHAR(50))) 
         FROM Yourtable 
         FOR xml path('')), 1, 1, '') 
SET @sql = ' 
select * 
    from (select ID,name,City,city_num =''City ''+ cast(row_number()over(partition by ID order by [from date]) as varchar(50)) 
      from Yourtable) a 
    pivot (max(city) for city_num in ('+ @col_list + ')) pv' 

EXEC Sp_executesql @sql 
+0

고마워요! 리드 기능은 나를 위해 잘 작동합니다. – Simon

+0

@ 시몬 - 이것이 도움이 되었다면, 답으로 표시하는 것을 잊지 마십시오. –