2013-05-06 55 views
2

我有以下表結構TSQL行到列

CREATE TABLE #T1 
(
    UniqueID varchar(100), 
    DrivingFld INT, 
    ColumnFld varchar(10) 
) 

從該表的基礎上,DrivingFld字段值,我想ColumnFld的輸出是在不同的列。 DirvingFld的columnFld值的最小值應該在第一列或它應該在第二列。

我們可以每UniqueID的2行最多或1排

INSERT INTO #T1 VALUES('1',1,'Val1') 
INSERT INTO #T1 VALUES('1',2,'Val2') 
INSERT INTO #T1 VALUES('2',5,'ValX1') 
INSERT INTO #T1 VALUES('2',10,'ValY2') 
INSERT INTO #T1 VALUES('3',5,'XVal1') 
INSERT INTO #T1 VALUES('4',10,'XVal22') 
INSERT INTO #T1 VALUES('4',5,Null) 

SELECT * FROM #T1 

--Expected Results 
--UniqueID, Column1, Column2 
--1 Val1 Val2 
--2 ValX1 ValY2 
--3 XVal1 Null 
--4 Null XVal22 

回答

2

有,你可以從行旋轉數據成列的幾種方法。

可以使用聚合函數與CASE表達:

select uniqueid, 
    max(case when rn = 1 then ColumnFld end) Col1, 
    max(case when rn = 2 then ColumnFld end) Col2 
from 
(
    SELECT uniqueid, ColumnFld, 
    row_number() over(partition by uniqueid 
         order by ColumnFld) rn 
    FROM #T1 
) d 
group by uniqueid; 

SQL Fiddle with Demo

或者,如果你的數據庫所具有的功能,則可以使用PIVOT函數來得到結果:

select uniqueid, Col1, Col2 
from 
(
    SELECT uniqueid, ColumnFld, 
    'Col'+cast(row_number() over(partition by uniqueid 
            order by ColumnFld) as varchar(10)) col 
    FROM #T1 
) d 
pivot 
(
    max(ColumnFld) 
    for col in (Col1, Col2) 
) piv; 

請參閱SQL Fiddle with Demo

+0

謝謝。這工作完美。 – Srini 2013-05-06 22:23:14