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)



     

  • 相关阅读:
    java的平台无关性
    Events_附
    get()和eq()方法的比较
    pushStack(elems)和end()方法
    slice()方法
    过滤jQuery对象
    处理DOM操作
    其他jQuery对象处理方法
    jQuery遍历函数总结
    jQuery事件
  • 原文地址:https://www.cnblogs.com/emmy/p/2261893.html
Copyright © 2011-2022 走看看