Sql server TSQL行到列
我有下面的表结构Sql server TSQL行到列,sql-server,tsql,pivot,Sql Server,Tsql,Pivot,我有下面的表结构 CREATE TABLE #T1 ( UniqueID varchar(100), DrivingFld INT, ColumnFld varchar(10) ) 从这个表中,基于DrivingFld字段值,我希望ColumnFld的输出位于不同的列中。DivingFLD列FLD值的最小值应位于第一列或第二列 每个UniqueID最多可以有2行或1行 INSERT INTO #T1 VALUES('1',1,'Val1') INSERT INTO #T
CREATE TABLE #T1
(
UniqueID varchar(100),
DrivingFld INT,
ColumnFld varchar(10)
)
从这个表中,基于DrivingFld字段值,我希望ColumnFld的输出位于不同的列中。DivingFLD列FLD值的最小值应位于第一列或第二列
每个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
有几种方法可以将数据从行旋转到列 您可以将聚合函数与
大小写
表达式一起使用:
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;
看
或者,如果您的数据库具有该功能,则可以使用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;
看