Sql 将列拆分/分隔为多个列

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

我完全被卡住了,我找不到这个问题的任何答案,即使这个问题看起来很简单。我可以在不创建新表的情况下分离“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      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