当前位置: 代码迷 >> Sql Server >> 高分求一sql语句!列转行有关问题
  详细解决方案

高分求一sql语句!列转行有关问题

热度:10   发布时间:2016-04-24 09:32:14.0
高分求一sql语句!列转行问题
表:yatiku_group_ChatPersionNumber
表中数据:
我要以下数据结构
我想查询出结果
RoomGroupid  uid1, uid2 
4                         9      12


哪个大大可以帮忙!
------解决思路----------------------
DECLARE @SQL VARCHAR(MAX)
SET @SQL='SELECT RoomGroupid'
DECLARE @MAXCOUNT INT
SELECT @MAXCOUNT=MAX(C)
FROM(
SELECT COUNT(1)C
FROM yatiku_group_ChatPersionNumber
GROUP BY RoomGroupid
)T
SELECT @SQL=@SQL+',MAX(CASE WHEN RN='+CAST(number AS VARCHAR(10))+' THEN uid END)[uid'+CAST(number AS VARCHAR(10))+']'
FROM master..spt_values
WHERE type='P'AND number>0 AND number<=@MAXCOUNT
SET @SQL=@SQL+'FROM(SELECT ROW_NUMBER()OVER(PARTITION BY RoomGroupid ORDER BY id)RN,*
FROM yatiku_group_ChatPersionNumber)T
GROUP BY RoomGroupid'
EXEC(@SQL)
你参考下
------解决思路----------------------

DECLARE @Sql NVARCHAR(max),@ColRows VARCHAR(2)
SELECT TOP 1 @ColRows=COUNT(*) FROM yatiku_group_ChatPersionNumber GROUP BY RoomGroupid ORDER BY COUNT(*)  DESC
SET @Sql=''
WHILE @ColRows>0
SELECT @Sql=',[uid'+@ColRows+']=max(case when RN='+@ColRows+' then [uid] end)'+@Sql,@ColRows=@ColRows-1
EXEC('select RoomGroupid'+@Sql+' from (select RoomGroupid,uid,RN=row_number()over(partition by uid order by id) from yatiku_group_ChatPersionNumber) as T'+' group by RoomGroupid')
  相关解决方案