2015-07-03 67 views
0

我想合併數據表中的行與財產以後這樣的數據數據行合併在SQL

A Ar 1 3 A Ab 3 4 B Bl 3 5 B Bk 5 2 M Mj 4 5

到數據表像這樣

A Ar 1 3 Ab 3 4 
B Bl 3 5 Bk 5 2 
M Mj 4 5 Null Null Null 

有任何TSQL statment做到這一點的?

+0

是可能的列的組數限制爲2組(6個COLS),或者可以有多於2行用於'A',2排爲'乙',等等,需要一個未知數量的輸出列? –

+0

Michael Berkowski它只有2行,列數是6列 – Afshin

+0

你需要哪個版本的sqlserver?如果你正在使用SQL 2012,那麼有一個很好的解決方案。 –

回答

0

這很簡單,因爲它的變量有限。第一部分是設置臨時表,因爲我不知道你的列名或任何東西。

select 'a' 'c1', 'ar' 'c2', '1' 'c3', '3' 'c4' 
into #temp 
union select 'a' 'c1', 'ab' 'c2', '3' 'c3', '4' 'c4' 
union select 'b' 'c1', 'bl' 'c2', '3' 'c3', '5' 'c4' 
union select 'b' 'c1', 'bk' 'c2', '5' 'c3', '2' 'c4' 
union select 'm' 'c1', 'mj' 'c2', '4' 'c3', '5' 'c4' 


select * 
from #temp t1 
left join #temp t2 
on t1.c1 = t2.c1 
and t1.c2 != t2.c2 
where t1.c2 = (select MAX(c2) from #temp where #temp.c1 = t1.c1) 


c1 c2 c3 c4 c1  c2  c3  c4 
m mj 4 5 NULL NULL NULL NULL 
b bl 3 5 b  bk  5  2 
a ar 1 3 a  ab  3  4 
0

嘗試:

--create temp table for OP data sample 
DECLARE @YourData AS TABLE 
    (
     C1 VARCHAR(1) , 
     C2 VARCHAR(2) , 
     C3 INT , 
     C4 INT 
    ) 
INSERT @YourData 
     (C1, C2, C3, C4) 
VALUES ('A', 'Ar', 1, 3), 
     ('A', 'Ab', 3, 4), 
     ('B', 'Bl', 3, 5), 
     ('B', 'Bk', 5, 2), 
     ('M', 'Mj', 4, 5) 
--final query 
;WITH cte 
      AS (SELECT C1 , 
         C2 , 
         C3 , 
         C4 , 
         ROW_NUMBER() OVER (PARTITION BY C1 ORDER BY C2) AS RN 
       FROM  @YourData 
      ) 
    SELECT c1.C1 , 
      c1.C2 , 
      c1.C3 , 
      c1.C4 , 
      c2.C1 , 
      c2.C2 , 
      c2.C3 , 
      c2.C4 
    FROM cte AS c1 LEFT JOIN cte AS c2 ON c1.C1 = c2.C1 AND c2.RN > 1 
    WHERE c1.rn = 1