zoukankan      html  css  js  c++  java
  • 一个sql的演变过程将字段值显示为字段

    -----------------------题目----------------------
    Name Subject Score
    张三 语文 11 
    张三 数学 22 
    张三 历史 33 
    李四 语文 11 
    李四 数学 22 
    李四 历史 33 

    想变成 
    姓名 语文 数学 历史 
    张三  11   22   33 
    李四  11   22   33 

    -------------------------------------------------

    解决步骤
    1 建表给数据

    Code

    2  第一感觉

    SELECT Name,
    '历史'=(CASE Subject when '历史' THEN Score end),
    '数学'=(case Subject when '数学' then Score end),
    '语文'=(case Subject when '语文' then Score end
     
    FROM TEST2

    --判断其字段值,并将其转换为字段名称

    显示效果如图:


    观察结果,只需要再按照Name来进行group,并sum(科目)就可以得到如题的结果,因此转换为如下:

    SELECT Name,
    '历史'=SUM(CASE Subject when '历史' THEN Score end),
    '数学'=SUM(case Subject when '数学' then Score end),
    '语文'=SUM(case Subject when '语文' then Score end
     
    FROM TEST2
     
    GROUP BY Name

    结果如图:

    3 改善sql语句

     终上所述的方法,不太理想需要进行一定的修改让其通用。
     如下:


    DECLARE @SQLStr VARCHAR(2000)
      
    SET @SQLStr='SELECT Name'
      
    SELECT @SQLStr=@SQLStr+''''+Subject+'''= SUM(CASE Subject WHEN '''+Subject+''' THEN Score END)' FROM (SELECT DISTINCT Subject FROM TEST2) AS Test
    --(SELECT DISTINCT Subject FROM TEST2) AS Test 此处AS Test 不能少,不然不识别查询来自于那个表
    --
    在sql中单引号的转义需要两个单引号,如'''+Subject+'''翻译之后为 '+Subject+'
      SELECT @SQLStr=@SQLStr+' FROM TEST2 GROUP BY Name'
    --对结果集进行分组统计
      EXEC (@SQLStr

    4 打完收工~~~~ 


  • 相关阅读:
    Python入门_绘制多个五角形_turtle
    Selenium3+python自动化6-八种元素元素定位(Firebug和firepath)
    MongoDB入门(3)- MongoDB备份与恢复
    MongoDB入门(2)- MongoDB安装
    MongoDB入门(1)- MongoDB简介
    Elastic Search操作入门
    应用Xml.Linq读xml文件
    Struts2入门(1)-第一个Struts2程序
    Hibernate入门(4)- Hibernate数据操作
    Hibernate入门(3)- 持久对象的生命周期介绍
  • 原文地址:https://www.cnblogs.com/tzy080112/p/1450703.html
Copyright © 2011-2022 走看看