今天做个后台服务,有个需求是批量生成一批表的数据,如果用BulkInsert会提升很大一截提交效率,但是如果用循环构造提交的Datable,则算法开销太高,所以用这种查询批量查出符合格式的DataTable结果集。

*思想就是将查询列做CASE判断值,然后放在 SELECT段中作为别名列显示字段值,然后再根据ID分组。

下面是内层的原始查询效果:

下面是行转列后查询效果如图:

下面是上面两张图的最终查询语句:

 SELECT f_gameID,SUM(score) AS totNum,
SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject01,SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject02,
SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject03,SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject04,
SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject05,SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject06,
SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject07,SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject08,
SUM(CASE f_sub WHEN '' THEN score ELSE END) AS f_subject09
FROM
(
SELECT u.f_gameID,u.f_sub,COUNT(u.f_sub) AS score
FROM t_mfg_GameUserAnswers AS u
LEFT JOIN t_mfg_Class AS c ON u.f_gameId = c.f_gameId
WHERE u.f_startTime > '2015-07-20'
AND u.f_endTime < '2015-07-24'
-- AND c.f_schoolId =
GROUP BY u.f_gameID ,u.f_sub
) AS a
GROUP BY f_gameID;

Mysql按照字段值做分组行转列查询的更多相关文章

  1. 今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!

    先来简单了解一下MySQL数据库有意思的简介 MySQL这个名字,起源不是很明确.一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上, 而且不管怎样,MySQL AB创始 ...

  2. Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全

    MySql行转列 以id分组,把name字段的值打印在一行,逗号分隔(默认) select CustomerDrugCode,group_concat(AuditItemName) from noau ...

  3. SqlServer 行转列 查询 并 导出 到 Excel 中 自动换行

    SELECT A.Hawb, ( SELECT GoodsNameCn+char(10) FROM HawbBody hl WHERE hl.Hawb=A.Hawb FOR XML PATH('') ...

  4. MySQL判断字段值来确定是否插入新记录

    今天正好有个新需求,要求在一张表中,保证不插入重复的记录. 即,保证每条记录中的某个字段的值不重复. 下面是我给出的SQL语句: //存在-->更新 //不存在-->插入 UPDATE 表 ...

  5. mysql更新字段值提示You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode

    1 引言 当更新字段缺少where语句时,mysql会提示一下错误代码: Error Code: 1175. You are using safe update mode and you tried ...

  6. MYSQL 删除字段值为NULL的语法

    2014年9月1日 15:11:05 delete form your_table where your_field is null and your_field1 = '123' ...

  7. mysql 升序 字段值为NULL 排在后面

    select * from yryz_products_t order by isnull(sort),sort;

  8. mysql多字段组合删除重复行

    DELETEFROM boll_paramWHERE id in ( SELECT a.id FROM ( SELECT id FROM boll_param WHERE (symbol, time_ ...

  9. mysql分组,行转列

    aaarticlea/jpeg;base64,/9j/4QEsRXhpZgAASUkqAAgAAAAPAJqCCgABAAAAwgAAABABAgAQAAAAygAAAAABAwABAAAAQBAAA

随机推荐

  1. 自学Java测试代码二String, StringBuffer

    2017-08-23 10:38:01 writer:pprp package test; import java.util.*; public class test2 { public static ...

  2. python 这个stdin怎么写

    !/usr/bin/env python -- coding: utf-8 -- import json import pprint import sys reload(sys) sys.setdef ...

  3. 对reducers 理解

    var reducers = { totalInEuros : function(state, item) { return state.euros += item.price * 0.8974243 ...

  4. PowerDesigner用法和技巧

    PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesign ...

  5. Educational Codeforces Round 42 (Rated for Div. 2)F - Simple Cycles Edges

    http://codeforces.com/contest/962/problem/F 求没有被两个及以上的简单环包含的边 解法:双联通求割顶,在bcc中看这是不是一个简单环,是的话把整个bcc的环加 ...

  6. [oracle] DBLINK +同义词,实现本地数据库访问另一台机器的数据库

    起因:订单表原来在90库上,后各种原因移到了40库上,需访问40库上的订单表.采用DBLINK+同义词方法: -- 1 在90机器上用GPSV4登录PLSQL,创建DBLINK,从本地数据库,连接到远 ...

  7. restframework api(基础2)

    一 socket简介 1 最简单的socket #################server import socket ip_port = ('127.0.0.1',9997) sk = sock ...

  8. angularJS----filter

    angularJS过滤器 过滤器(filter)正如其名,作用就是接收一个输入(隐式的接收数据源),通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组 ...

  9. .NET中使用Redis:http://www.cnblogs.com/yangecnu/p/Introduct-Redis-in-DotNET.html

    .NET中使用Redis   Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http: ...

  10. TStringHelper.Split

    作为对泛型的支持,TStringHelper.Split方法理所应当地出现了. 示例代码1: var  iText: string;  iAStr: TArray<string>;  I: ...