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)



     

  • 相关阅读:
    终于有人把MYSQL索引讲清楚了
    计算机基础知识总结与操作系统 PDF 下载
    java电子书python电子书等PDF下载方式
    redis布隆过滤器
    IntelliJ IDEA 2020.1 激活教程,亲测可用
    Another Redis DeskTop Manager一款稳定全新的redis连接工具
    一文吃透redis持久化,妈妈再也不担心我面试过不了!
    ES6 运算符
    If-Else的5种方法从入门到高级示例
    ES6中 的类(class)
  • 原文地址:https://www.cnblogs.com/emmy/p/2261893.html
Copyright © 2011-2022 走看看