none
SQL 如何把一列的值转换成一行显示 RRS feed

答案

  • 参考关键字 pivot

    给个例子:

    --行转列和列转行
    
    create table #tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
    insert into #tb values('张三' , '语文' , 74)
    insert into #tb values('张三' , '数学' , 83)
    insert into #tb values('张三' , '物理' , 93)
    insert into #tb values('李四' , '语文' , 74)
    insert into #tb values('李四' , '数学' , 84)
    insert into #tb values('李四' , '物理' , 94)
    go
    
    select * from #tb
    
    SELECT * FROM #tb
    PIVOT(sum(分数) FOR 课程 IN (语文, 数学, 物理)) AS A
    
    

    family as water
    • 已标记为答案 张凯 2010年9月18日 1:12
    2010年9月17日 7:24

全部回复

  • 参考关键字 pivot

    给个例子:

    --行转列和列转行
    
    create table #tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
    insert into #tb values('张三' , '语文' , 74)
    insert into #tb values('张三' , '数学' , 83)
    insert into #tb values('张三' , '物理' , 93)
    insert into #tb values('李四' , '语文' , 74)
    insert into #tb values('李四' , '数学' , 84)
    insert into #tb values('李四' , '物理' , 94)
    go
    
    select * from #tb
    
    SELECT * FROM #tb
    PIVOT(sum(分数) FOR 课程 IN (语文, 数学, 物理)) AS A
    
    

    family as water
    • 已标记为答案 张凯 2010年9月18日 1:12
    2010年9月17日 7:24
  • 没看懂!     我那数据都是nvarchar类型的,请问怎么处理。  

    例如:

    惠普

    联想

    戴尔

    显示成:惠普 联想 戴尔

    2010年9月17日 8:18
  • 楼上给的例子中的‘语文’、‘数学’... 也都是字符型的呀。你的表里就一个字段吗?
    2010年9月17日 9:11
    版主

  • CREATE TABLE tb(col VARCHAR(100),VALUE INT)
    GO
    INSERT tb
    SELECT
    '惠普' , 1 UNION ALL SELECT
    '联想' , 2 UNION ALL SELECT
    '戴尔' , 3
    GO
    SELECT *
    FROM tb pivot(max(value) FOR col IN(惠普,联想,戴尔) ) k
    /*
    惠普 联想 戴尔
    ---- ---- ----
       1    2    3*/
    2010年9月17日 12:08