zoukankan      html  css  js  c++  java
  • sql行转列例子

    create table a 
    (
    学号 int null,
    姓名 nvarchar(20) null
    )
    insert into a (学号,姓名)
    select 1001 , '王一' union all
    select 1000 ,'李成'


    go
    create table b
    (
    学号 int null,
    科目 nvarchar(20) null,
    成绩 int null
    )
    insert into b(学号,科目,成绩)

    select 1001 ,'英语', 89 union all
    select 1001 ,'数学', 87 union all
    select 1000 ,'语文', 76 union all
    select 1000 ,'数学', 98 union all
    select 1000, '英语', 86
    --1
    SELECT * FROM (SELECT a.学号,a.姓名,b.科目,b.成绩 FROM a a INNER JOIN b b ON a.学号=b.学号) q
    PIVOT( max(成绩) FOR 科目 IN(语文,数学,英语)) w
    go

    --2
    WITH cte1 AS (
    SELECT a.姓名,b.科目,b.成绩
    FROM a a INNER JOIN b b ON a.学号=b.学号
    )
    SELECT cte1.姓名,
    max(CASE cte1.科目 WHEN '语文' THEN cte1.成绩 ELSE 0 END) AS 语文,
    max(CASE cte1.科目 WHEN '数学' THEN cte1.成绩 ELSE 0 END) AS 数学,
    max(CASE cte1.科目 WHEN '英语' THEN cte1.成绩 ELSE 0 END) AS 英语
    FROM cte1
    GROUP BY cte1.姓名
    go

    --3
    WITH cte1 AS (
    SELECT a.姓名,b.科目,b.成绩
    FROM a a INNER JOIN b b ON a.学号=b.学号
    )
    SELECT DISTINCT T.姓名,
    (SELECT max(成绩) FROM cte1 WHERE 姓名=t.姓名 AND 科目 = '语文') AS '语文',
    (SELECT max(成绩) FROM cte1 WHERE 姓名=t.姓名 AND 科目 = '数学') AS '数学',
    (SELECT max(成绩) FROM cte1 WHERE 姓名=t.姓名 AND 科目 = '英语') AS '英语'
    FROM cte1 T
    4
    DECLARE @str NVARCHAR(max)
    SELECT @str=Isnull(@str+'],[','')+科目 FROM b GROUP BY 科目
    SET @str ='[' + @str + ']'
    PRINT @str
    SET @str= 'select * from (SELECT aa.学号,aa.姓名,bb.科目,bb.成绩 FROM a aa INNER JOIN b bb ON aa.学号=bb.学号) q pivot( max(成绩) for 科目 in (' + @str + ') ) w '
    EXEC (@str)



     

  • 相关阅读:
    换手机了,dopod566,小E丢了 :(
    在a标签的href与onclick中使用javascript的区别
    我的SQL相关TIPS
    asp.net的ajax服务器端代理
    IE和Firefox中的dom加载完成执行代码(defer)
    看几个源码,自己多做项目了!
    数据层使用Server对象;动态生成控件多文件上传
    ref,out(摘)
    JavaScript和jQuery的DOM操作
    闭包
  • 原文地址:https://www.cnblogs.com/emmy/p/2261893.html
Copyright © 2011-2022 走看看