Sql 将列拆分/分隔为多个列
我完全被卡住了,我找不到这个问题的任何答案,即使这个问题看起来很简单。我可以在不创建新表的情况下分离“description”列吗 现在我只写了这个最简单的代码Sql 将列拆分/分隔为多个列,sql,pivot,crosstab,Sql,Pivot,Crosstab,我完全被卡住了,我找不到这个问题的任何答案,即使这个问题看起来很简单。我可以在不创建新表的情况下分离“description”列吗 现在我只写了这个最简单的代码 select item_id, description from data where item_id = '123' 使用该代码,它看起来如下所示: item_id description 123 A 123 B 123 C item_id desc_1 desc_1 desc_2 123 A
select item_id, description
from data
where item_id = '123'
使用该代码,它看起来如下所示:
item_id description
123 A
123 B
123 C
item_id desc_1 desc_1 desc_2
123 A B C
但我想让它看起来像这样:
item_id description
123 A
123 B
123 C
item_id desc_1 desc_1 desc_2
123 A B C
在
case
表达式的帮助下使用条件聚合
select item_id,
max(case when description= 'A' then description end) [desc_1],
max(case when description= 'B' then description end) [desc_2],
max(case when description= 'C' then description end) [desc_3],
from table
group by item_id
编辑:因此,动态透视方式与SQL Server类似
declare @col varchar(max), @q varchar(max)
set @col = stuff(
(select distinct ','+quotename('desc_'+cast(row_number() over(partition by Item_id order by description) as varchar))
from table for xml path('')),
1,1,'')
set @q = 'select * from
(
select *,
''desc_''+cast(row_number() over(partition by Item_id order by description) as varchar) rn
from table
)a
PIVOT
(
max(description) for rn in ('+@col+')
)p'
EXEC (@Q)
结果:
item_id desc_1 desc_2 desc_3
123 A B C
234 B C d
首先声明不同的列名 比如ABC,DEF,GHI 价值观 然后写动态透视图
DECLARE @COLS AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
SET @COLS=STUFF((select ',' + QUOTENAME(Course) from cst_coursedetails where programid=1 FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,'')
SET @query =' SELECT * FROM(SELECT B.COLLCODE, B.COLLNAME,C.Course AS COURSE,D.ROLLNAME, E.ExamType, COUNT (A.HTNO) AS PRECOUNT FROM TableOne AS A
INNER JOIN TableTwo AS B ON A.COLLCODE=B.COLLCODE AND A.PROGRAMID=B.PROGRAMID
INNER JOIN TableThreee AS C ON C.CourseId=A.CourseId
INNER JOIN TableFour AS D ON D.ROLLID=A.ROLLID
INNER JOIN CST_EXAMTYPE AS E ON E.ExamTypeId=A.ExamTypeId
WHERE A.STATUSID !=17 AND a.ProgramId=1 AND A.ROLLID IN(1,2,3) AND A.EXAMTYPEID IN(1) GROUP BY B.COLLNAME,B.COLLCODE,C.Course,d.ROLLNAME ,E.ExamType
)SRC
PIVOT(
SUM(PRECOUNT) FOR COURSE IN('+@COLS+')
)AS PIV'
您正在寻找的称为“PIVOT”的。一些数据库提供者支持它,而另一些则不支持。在问题中标记您的数据库您使用的是哪种产品?博士后?神谕“SQL”只是一种查询语言,而不是特定数据库产品的名称。我很可能在寻找支点。我正在尝试从数据库中获取excel数据。数据是从IBS XT客户端的ERP收集的,我认为这不是正确的解决方案,因为描述可能与item_id.Ankit不同,这是事实。例如,在item_id 234描述中,可能有B、C、D