2016-04-14 63 views
-2

我有一個表像下面:動態SQL樞軸無結塊

cust no int id row no 
111111 53453453623432 12345 
111112 63453453623432 12346 
111111 53453453623432 21234 
111112 63453453623432 33347 

,我想實現下面的下面的結果 -

cust no int id row no 1 row no 2 
111111 53453453623432 12345 21234 
111112 63453453623432 12346 33347 

我基本上是想沒有樞軸行升序。我會注意到,對於特定的客戶可能會有無數的ROW_NO。

我一直在用這個拉出我的頭髮。不知道這是否需要TSQL。任何幫助,將不勝感激。感謝大家。

+1

請不喊我們。修復您的CAPS LOCK鍵。 SHOUTING不會讓你的答案更快,文字更難讀,而且這只是粗魯和煩人。 –

+0

對不起本站第一次 – MRUNIVERSE

回答

1

試試這個

select * from (
    select cust_no,int_id,row_no, 
     'row_no_'+cast(row_number() over(partition by int_id 
       order by row_no) as nvarchar(10)) as colid 
    from @table) p 
    pivot (min(row_no) for colid in (row_no_1,row_no_2)) pvt 

結果如下

cust_no int_id   row_no_1 row_no_2 
111111 53453453623432 12345 21234 
111112 63453453623432 12346 33347 

完整劇本,

declare @table table (
cust_no nvarchar(100), int_id nvarchar(100), row_no nvarchar(100)) 

insert into @table 
values('111111','53453453623432','12345') 
,('111112','63453453623432','12346') 
,('111111','53453453623432','21234') 
,('111112','63453453623432','33347') 

select * from (
    select cust_no,int_id,row_no, 
     'row_no_'+cast(row_number() over(partition by int_id 
       order by row_no) as nvarchar(10)) as colid 
    from @table) p 
    pivot (min(row_no) for colid in (row_no_1,row_no_2)) pvt 
+1

謝謝abdul ... brillant – MRUNIVERSE

0
   Declare @Query1 varchar(max),@Query2 varchar(max) 
       IF OBJECT_ID('tempdb..#Temp') IS NOT NULL 
        Drop TABLE #Temp 
       create table 
       #Temp ([cust_no] bigint,[int_id] bigint,[row_no] bigint) 

       Insert INTO #Temp([cust_no],[int_id],[row_no]) values (111111,53453453623432,12345) 
       Insert INTO #Temp([cust_no],[int_id],[row_no]) values (111112,63453453623432,12346) 
       Insert INTO #Temp([cust_no],[int_id],[row_no]) values (111111,53453453623432,21234) 
       Insert INTO #Temp([cust_no],[int_id],[row_no]) values (111112,63453453623432,33347) 
       Insert INTO #Temp([cust_no],[int_id],[row_no]) values (111111,53453453623432,33348) 
       Insert INTO #Temp([cust_no],[int_id],[row_no]) values (111111,53453453623432,33349) 

       IF OBJECT_ID('tempdb..#Temp1') IS NOT NULL 
        Drop TABLE #Temp1 

        select cust_no,int_id,row_no, 
         'row_no_'+cast(row_number() over(partition by int_id 
           order by row_no) as nvarchar(10)) as colid 
        INTO #Temp1 from #Temp 


         SELECT @Query1 = COALESCE(@Query1 + ', ', '') + colid 
            FROM #temp1 group by colid ; 

        --print @Query1 


         SET @Query2 = 'Select * from #temp1 pivot (min(row_no) for colid in (' + @Query1 + ')) pvt' 

        --print @Query2 
        exec(@Query2)