当前位置: 代码迷 >> Sql Server >> 怎么把一列数据按条件,分成多列
  详细解决方案

怎么把一列数据按条件,分成多列

热度:92   发布时间:2016-04-24 09:02:31.0
如何把一列数据按条件,分成多列。
请求高手,写个语句,如何把一列数据按条件,分成多列。

------解决思路----------------------
分两列还可以这样,分多列就用动态吧

;with t0(hno, qpp) AS(
  select 2, 'B=B'
  union all select 1, 'B33'
  union all select 1, 'B3B'
  union all select 2, 'B=C'
  union all select 1, 'C3C'
  union all select 2, 'A=B'
), t AS(
  select hno, qpp
    , ROW_NUMBER() OVER(ORDER BY GetDate()) rn
  from t0
), t1 AS(
  select hno, qpp
    , ROW_NUMBER() OVER(PARTITION BY hno ORDER BY rn) rn
  from t
), t2 AS(
  select rn
    , MIN(hno) as hno_1
    , MAX(hno) as hno_2
  from t1
  group by rn
)
select t2.hno_1
  , t1.qpp as qpp_1
  , t2.hno_2
  , tt.qpp as qpp_2
from t2 join t1 on t2.rn=t1.rn and t2.hno_1=t1.hno
  join t1 tt on t2.rn=tt.rn and t2.hno_2=tt.hno
/*-------------------------
hno_1 qpp_1 hno_2 qpp_2
-----------------------
1 B33 2 B=B
1 B3B 2 B=C
1 C3C 2 A=B
-------------------------*/

------解决思路----------------------
--动态
DECLARE @SQL VARCHAR(8000)
DECLARE @M INT,@I VARCHAR(10)
SET @SQL=''
SELECT @M=COUNT(DISTINCT hengnumber)FROM TB
SET @I=1
WHILE @I<=@M
SELECT @SQL=@SQL+',MAX(CASE WHEN HRN='+@I+' THEN hengnumber END)[hengnumber_'+@I+']'
    +',MAX(CASE WHEN HRN='+@I+' THEN Quo_Paper END)[Quo_Paper_'+@I+']',@I=@I+1
SET @SQL='SELECT '+STUFF(@SQL,1,1,'')
    +' FROM(SELECT *,ROW_NUMBER()OVER(PARTITION BY hengnumber ORDER BY GETDATE())RN'
    +',DENSE_RANK()OVER(ORDER BY hengnumber)HRN'
    +' FROM TB  where Quo_no=''P1503240008'')T GROUP BY RN'
--PRINT @SQL
EXEC(@SQL)
  相关解决方案