精华内容
下载资源
问答
  • 需求:一个商品有个属性,单独存在一个属性表,商品表中存有一个属性id但是是以字符形式存在一中,以逗号为分隔符。要求查询出来所有的属性在一行中。 我们以a表作为属性表,b表作为商品表。使用group_...

    需求:一个商品有多个属性,单独存在一个属性表,商品表中存有一个属性id但是是以字符形式存在一列中,以逗号为分隔符。要求查询出来所有的属性在一行中。





    我们以a表作为属性表,b表作为商品表。使用group_concat函数来进行分组字符连接,然后对于查出来的a表的id用concat函数进行替换,然后使用正则匹配方式来匹配a.id,就可以查询出某个商品的所有属性了。



    展开全文
  • MYSQL 多行转多列

    2019-03-18 16:31:42
    MYSQL 多行转多列 mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中...

    MYSQL 多行转多列

    mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思

    数据库结构如图:

    而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现:

    第一种展现如图----【多行变一列】(合并后的数据在同一列上):

    sql如下:

    select name ,group_concat(sore Separator ';') as score from stu group by name 

    第二种展现如图----【多行变多列】(合并后的数据在不同列上):

    sql如下:

    SELECT name ,
    MAX(CASE type WHEN '数学' THEN score ELSE 0 END ) math,
    MAX(CASE type WHEN '英语' THEN score ELSE 0 END ) English ,
    MAX(CASE type WHEN '语文' THEN score ELSE 0 END ) Chinese 
    FROM stu  
    GROUP BY name

    ----------------------------------------------------------------------------------------------------- 可爱的分割线 ----------------------------------------------------------------------------------------------------

    当然,在第一种情况中(显示在一列),也有些其他的类似形式:

    形式一:

    sql如下:

    select name ,group_concat(type,'分数为:',score  Separator '; ') as score from stu group by name 


    呵呵,当然 如果你很熟悉group_concat和concat的用法,你也做出如下形式:

    其sql如下:

    select name ,concat(name ,'的分数为[',group_concat(type,'分数为:',score  Separator '; '),']') as score from stu group by name 
    
    
    
    原文 
    http://m.blog.csdn.net/article/details?id=50231435
    展开全文
  • 多行转多列,废话不多说,开始正文:首先,参考了:http://www.cnblogs.com/kingthy/archive/2008/04/29/1175697.html(这个人写的例子很好,很简单,我就是参考他的,然后改的自己的,如果你们的数据库表模式和他的...

    参考:
    http://www.cnblogs.com/kingthy/archive/2008/04/29/1175697.html(主要参考他)
    http://blog.csdn.net/wuxiaokaixinguo/article/details/8523048
    https://msdn.microsoft.com/zh-cn/dd378780.aspx
    http://bbs.csdn.net/topics/370089729 (这的人说的真好,只不过我本文没用到存储过程)

    1、先介绍下我的数据库结构,3个表分别是 整机mac(爷爷)----设备dev(爸爸)---组件comp(儿子)










    </pre><pre code_snippet_id="1664094" snippet_file_name="blog_20160427_1_6906197" name="code" class="cpp">
    </pre><p>2、爷爷和爸爸表的查询SELECT MacSN,MAX(CASE devTypeId WHEN 2 THEN devSN ELSE 0 END) AS 显示器,MAX(CASE devTypeId WHEN 3 THEN devSN ELSE 0 END) AS 条码阅读器,MAX(CASE devTypeId WHEN 4 THEN devSN ELSE 0 END) AS 主板盒,MAX(CASE devTypeId WHEN 5 THEN devSN ELSE 0 END) AS 打印机,MAX(CASE devTypeId WHEN 6 THEN devSN ELSE 0 END) AS 打印头, MAX(CASE devTypeId WHEN 7 THEN devSN ELSE 0 END) AS 固件版本号,MAX(CASE devTypeId WHEN 8 THEN devSN ELSE 0 END) AS 电源,MAX(CASE devTypeId WHEN 9 THEN devSN ELSE 0 END) AS 键盘 FROM (SELECT a.ID,a.MacSN,b.devSN,b.devTypeId,b.Remark FROM t_machineinfo A LEFT JOIN t_deviceinfo B ON B.MacId = A.id ORDER BY a.id ) AS TMPGROUP BY MacSN</p><pre code_snippet_id="1664094" snippet_file_name="blog_20160427_1_6906197" name="code" class="cpp">


    结果图5:



    第二部、终结步骤

    SELECT MacSN AS 0整机号,
    MAX(CASE devTypeId WHEN 2 THEN devSN ELSE 0 END) AS 1显示器,
    MAX(CASE devTypeId WHEN 3 THEN devSN ELSE 0 END) AS 2条码阅读器,
    MAX(CASE devTypeId WHEN 4 THEN devSN ELSE 0 END) AS 3主板盒,
    MAX(CASE devTypeId WHEN 5 THEN devSN ELSE 0 END) AS 4打印机,
    MAX(CASE devTypeId WHEN 6 THEN devSN ELSE 0 END) AS 5打印头, 
    MAX(CASE devTypeId WHEN 7 THEN devSN ELSE 0 END) AS 6固件版本号,
    MAX(CASE devTypeId WHEN 8 THEN devSN ELSE 0 END) AS 7电源,
    MAX(CASE devTypeId WHEN 9 THEN devSN ELSE 0 END) AS 8键盘, 
    MAX(CASE compTypeId WHEN 10 THEN devSN ELSE 0 END) AS 9液晶屏, 
    MAX(CASE compTypeId WHEN 11 THEN devSN ELSE 0 END) AS 10识别引擎, 
    MAX(CASE compTypeId WHEN 12 THEN devSN ELSE 0 END) AS 11主板, 
    MAX(CASE compTypeId WHEN 13 THEN devSN ELSE 0 END) AS 12内存, 
    MAX(CASE compTypeId WHEN 14 THEN devSN ELSE 0 END) AS 13存储卡 
    FROM 
    (SELECT a.ID,a.MacSN,
    b.devSN,b.devTypeId,b.Remark, 
    c.CompSN,c.compTypeId,c.Remark AS cmpRK
    FROM t_machineinfo A
    LEFT JOIN t_deviceinfo B  ON B.MacId = A.id 
    LEFT JOIN t_componentinfo C ON B.id = C.devId
    ORDER BY a.id ) AS TMP
    
    GROUP BY MacSN


    结果:




    搞定,下班~~~~




    展开全文
  • 这是使用到的jar包,由于使用的是XSSFWorkbook所以jar较(如果用HSSFWorkbook 就只需要导入poi这一个jar就行,两者的差异是HSSFWorkbook 最多能创建255),注意版本4.0以上会报错。目前未找到解决方案 package ...

    最近接到了一个导数据的活,需求如下

    数据库中的结构
    这是数据库中查到的结构
    用户期望的数据
    这是用户期望的数据
    这是使用到的jar包,由于使用的是XSSFWorkbook所以jar较多(如果用HSSFWorkbook 就只需要导入poi这一个jar就行,两者的差异是HSSFWorkbook 最多能创建255列),注意版本4.0以上会报错。目前未找到解决方案
    这是使用到的jar包

    package com.wfr.demo;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.URISyntaxException;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import com.wfr.util.DBUtils;
    
    public class export {
    	public static void main(String[] args) throws Exception{
    		DBUtils db = new DBUtils();
    		db.close(sel(db,"SCM_HX13_EquoPurChaseOrderHead","设备采购订单(协议下订单)",true));
            db.close(sel(db,"SCM_HX13_ServiceHead","服务订单(协议下订单)",true));
            db.close(sel(db,"SCM_HX13_MaterialORHead","材料采购订单(协议下订单)",true));
            db.close(sel(db,"SCM_HX13_EquoPurChaseOrderHead","设备采购订单",false));
            db.close(sel(db,"SCM_HX13_ServiceHead","服务订单",false));
            db.close(sel(db,"SCM_HX13_MaterialORHead","材料采购订单",false));
            db.close();  
        }
    
    	public static ResultSet sel(DBUtils db, String bill, String name, boolean b) throws URISyntaxException, Exception, SQLException {
    		int a=b?1:0;
    		String sql="SELECT h.no ,workitemdesc name,nvl((select name from GP_Operator where id = d.USERID),' ') opt,nvl(d.resultinfo,' ') action,nvl(to_char(CreateTime,'YYYY-mm-dd hh24:mi:ss'),' ') time,nvl(d.UserInfo,' ') info FROM "+bill+" h left join\r\n" + 
    				"(SELECT BillID,\r\n" + 
    				"  WorkItemID,\r\n" + 
    				"  Item.InstanceID AS InstanceID,\r\n" + 
    				"  ParentWorkItemID,\r\n" + 
    				"  WorkItemState,\r\n" + 
    				"  WorkItemDesc,\r\n" + 
    				"  UserID,\r\n" + 
    				"  FinishTime AS CreateTime,\r\n" + 
    				"  ResultInfo,\r\n" + 
    				"  UserInfo,\r\n" + 
    				"  -1   AS SendUserID,\r\n" + 
    				"  NULL AS SendTime,\r\n" + 
    				"  ''   AS SendMessage\r\n" + 
    				"FROM WF_Instance Ins\r\n" + 
    				"LEFT JOIN WF_WorkItem Item\r\n" + 
    				"ON Ins.InstanceID=Item.InstanceID\r\n" + 
    				"LEFT JOIN WF_InstanceDoc InsDoc\r\n" + 
    				"ON (Item.Instanceid =InsDoc.Instanceid\r\n" + 
    				"AND InsDoc.DocID    =0)\r\n" + 
    				"WHERE WorkItemState<>3\r\n" + 
    				"UNION ALL\r\n" + 
    				"SELECT info.BillID AS BillID,\r\n" + 
    				"  info.WorkItemID  AS WorkItemID,\r\n" + 
    				"  info.InstanceID  AS InstanceID,\r\n" + 
    				"  info.WorkItemID  AS ParentWorkItemID,\r\n" + 
    				"  info.ResultState AS WorkItemState,\r\n" + 
    				"  CASE\r\n" + 
    				"    WHEN info.InformType=10\r\n" + 
    				"    THEN '确认传阅'\r\n" + 
    				"    ELSE '结束备案'\r\n" + 
    				"  END                AS WorkItemDesc,\r\n" + 
    				"  info.ReceiveUserID AS UserID,\r\n" + 
    				"  info.ReplyTime     AS CreateTime,\r\n" + 
    				"  CASE\r\n" + 
    				"    WHEN info.ResultState=1\r\n" + 
    				"    THEN '待处理'\r\n" + 
    				"    ELSE '已处理'\r\n" + 
    				"  END               AS ResultInfo,\r\n" + 
    				"  info.ReplyMessage AS UserInfo,\r\n" + 
    				"  info.SendUserID,\r\n" + 
    				"  info.Createtime  AS SendTime,\r\n" + 
    				"  info.PostMessage AS SendMessage\r\n" + 
    				"FROM WF_RecordInformTable info\r\n" + 
    				"LEFT JOIN WF_WorkItem Item\r\n" + 
    				"ON Item.InstanceID=info.InstanceID\r\n" + 
    				"\r\n" + 
    				"UNION ALL\r\n" + 
    				"SELECT BillID,\r\n" + 
    				"  0 AS WorkItemID,\r\n" + 
    				"  InstanceID,\r\n" + 
    				"  0 ParentWorkItemID,\r\n" + 
    				"  1 WorkItemState,\r\n" + 
    				"  '运营退回' AS WorkItemDesc,\r\n" + 
    				"  o.id   AS UserID,\r\n" + 
    				"  LogDate CreateTime,\r\n" + 
    				"  '已发送' AS ResultInfo,\r\n" + 
    				"  '' UserInfo,\r\n" + 
    				"  SendUserID,\r\n" + 
    				"  LogDate SendTime,\r\n" + 
    				"  '' SendMessage\r\n" + 
    				"FROM SCM_HX03_RO_WF w\r\n" + 
    				"LEFT JOIN GP_Operator o\r\n" + 
    				"ON w.staffID=o.Staff\r\n" + 
    				"UNION ALL\r\n" + 
    				"SELECT info.BillID AS BillID,\r\n" + 
    				"  -1               AS WorkItemID,\r\n" + 
    				"  1253 AS InstanceID,\r\n" + 
    				"  -1 AS ParentWorkItemID,\r\n" + 
    				"  -1 AS WorkItemState,\r\n" + 
    				"  CASE\r\n" + 
    				"    WHEN tostatus='Audited'\r\n" + 
    				"    THEN '审批'\r\n" + 
    				"    WHEN tostatus='approved'\r\n" + 
    				"    THEN '取消审批'\r\n" + 
    				"    ELSE '审批流操作'\r\n" + 
    				"  END AS WorkItemDesc,\r\n" + 
    				"  info.UserID,\r\n" + 
    				"  info.OptDate AS CreateTime,\r\n" + 
    				"  CASE\r\n" + 
    				"    WHEN info.Action='AuditPass'\r\n" + 
    				"    THEN '审批通过'\r\n" + 
    				"    ELSE '取消审批'\r\n" + 
    				"  END          AS ResultInfo,\r\n" + 
    				"  info.Notes   AS UserInfo,\r\n" + 
    				"  -1           AS SendUserID,\r\n" + 
    				"  info.OptDate AS SendTime,\r\n" + 
    				"  ''           AS SendMessage\r\n" + 
    				"FROM SCM_AUDITNOTES info\r\n" + 
    				"WHERE action IS NOT NULL\r\n" + 
    				") d using(billid) where h.status>=30 and h.BillDate>='1-6月-19' and h.IsAgreement="+a+"  Order By no desc, CREATETIME";
            db.openConnection();
            ResultSet rst = db.execQuery(sql);
            Map<String,List<String>> map = new HashMap<>();
            int max = 0;
            //将数据保存到list中
            if (rst!=null) {
                while(rst.next()){
                	String no = rst.getString("no");
                	if(map.get(no)==null) {
                		List<String> list = new ArrayList<>();
                		map.put(no, list);
                	}
            		List<String> list = map.get(no);
                    list.add(rst.getString("name"));  
                    list.add(rst.getString("opt"));
                    list.add(rst.getString("action"));
                    list.add(rst.getString("time"));
                    list.add(rst.getString("info"));
                    max = max>list.size()?max :list.size();
                    map.put(no, list);
                }
            }
            exportexcel(map,name,max);//导出excel
    		return rst;
    	}
    
    	public static void exportexcel(Map<String, List<String>> map, String name, int max) {
    		//实例化XSSFWorkbook对象,相当于新建一个Excel文件
            XSSFWorkbook workbook=new XSSFWorkbook();
            //根据XSSFWorkbook获取Sheet
            XSSFSheet sheet=workbook.createSheet();
            //添加一行作为表格头
            XSSFRow header=sheet.createRow(0);
     
            //创建表格样式
            XSSFCellStyle cellStyle=workbook.createCellStyle();
            //cellStyle.setAlignment(CellStyle.ALIGN_CENTER);//内容居中显示
            //创建头部表格
            XSSFCell cell=header.createCell(0);
            cell.setCellStyle(cellStyle);
            cell.setCellValue("菜单名称");
     
            cell=header.createCell(1);
            cell.setCellStyle(cellStyle);
            cell.setCellValue("单据编号");
     
            int n = 1;
            while(n<=max) {
            	int z = n/5+1;
            	n++;
            	cell=header.createCell(n);
                cell.setCellStyle(cellStyle);
                cell.setCellValue("任务名称"+z);
                n++;
            	cell=header.createCell(n);
                cell.setCellStyle(cellStyle);
                cell.setCellValue("经办人"+z);
                n++;
            	cell=header.createCell(n);
                cell.setCellStyle(cellStyle);
                cell.setCellValue("处理结果"+z);
                n++;
            	cell=header.createCell(n);
                cell.setCellStyle(cellStyle);
                cell.setCellValue("时间"+z);
                n++;
            	cell=header.createCell(n);
                cell.setCellStyle(cellStyle);
                cell.setCellValue("审批意见"+z);
            }
            int z = 1;
            for(Entry<String, List<String>> entry : map.entrySet()){
                String no = entry.getKey();
                List<String> list = entry.getValue();
                XSSFRow content=sheet.createRow(z);
                content.createCell(0).setCellValue(name);
                content.createCell(1).setCellValue(no);
                //获取员工
                for(int i = 0;i<list.size();i++) {
                	//创建单元格并设置值
                    content.createCell(i+2).setCellValue(list.get(i));
                }
                z++;
            }
            try {
                //写入文件
                FileOutputStream fileOutputStream=new FileOutputStream("E:\\export\\"+name+".xlsx");
                workbook.write(fileOutputStream);
                fileOutputStream.close();
                System.out.println("导出成功!");
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("导出失败!");
            }
    	}
    
    }
    
    
    展开全文
  • 数据库一列多行转一行多列

    千次阅读 2014-05-22 13:37:11
    如题: ...max(case when name='1' then [temp] else null end) as temp1 ..., max(case when name='2' then [temp] else null end) as temp2, ... max(case when name='3' then [temp] else null end) as
  • 多行转多列,行数和列数不确定

    千次阅读 2014-01-15 17:59:40
    ...分类: 数据库开发技术 原始需求,有2表如下 SQL> select * from mas; TO TOOLNAME -- ---------- 01 包裹 02 信函 03 挂号信 04 中国速递 05 EMS 06 DHL 6 rows selected
  • 表中数据如下: ModelFieldID FieldContext 1 一月 2 58 3 59 1 二月 2 64 3 87 转换为 项目 项目A 项目B 一月 58 59 二月 64 87 急用!!哪位大神告诉下!谢谢了!
  • Oracle数据库单列转多行

    千次阅读 2018-09-13 14:37:59
    但是在实际运用的过程中可能会用到分隔符引用的需要转多行的需求,这时候我们一般会有两种处理办法: - 写函数方法 - 正则表达式 比较而言第二种更加方便快捷,本文详细介绍第二种方式。 regexp_substr函数 ...
  • 是将一组比赛记录统计出来,将象棋游戏玩家的两条记录在一行里面显示,进数据库看之后是首先想到的是行列,但是一开始就觉得不对,后来写到一半确实不对,后来上网查询了半天多行多列转一行多列,发现又要写算法又...
  • 列多行进行转行操作

    千次阅读 2016-08-31 15:59:31
    其实转行,可以在数据库当中转换,也可以在程序中进行转换,因为我这个设计张表所以在程序当中进行转换,在nosql非关系型数据库当中,可以把行转列看成一个矩阵,这个矩阵的可以进行90度的转换,在非关系型...
  • mysql数据库一行转多行

    千次阅读 2016-07-12 13:41:59
    即同一个中存储了个属性值(具体结构见下表)。 这种模式下,应用常常需要将这个依据分隔符进行分割,并得到转行的结果。 表数据: ID Value 1 tiny,small,big 2 ...
  • 数据库同一插入多行值分别取出问题/行列转换 问题描述:同一比如time,存放了早晨、中午、晚上,首先这样设计数据库存在不合理,在取这三个时间节点的数据时,需要取三次,根据where条件筛选,再将结果自连接合并...
  • 数据库之行转列

    2019-05-29 16:50:55
    有些是标准的SQL函数 1、COALESCE — 空值替换函数。 示例:COALESCE(col, 'replacement'):如果col...该函数将对指定的值进行分割,分割后的每个子串将成一行,个子串将多行。 示例:regexp_split_to_...
  • 简单解释一下需求,将同一年月的多行转到一行,分别展示每个用户的信息,在最后分别对前面数量和金额进行合计。 这其实又是行列转换的一个应用,下面直接贴SQL /*数据准备*/ WITH x0 AS ( SELECT CONVERT...
  • 即同一个中存储了个属性值(具体结构见下表)。 这种模式下,应用常常需要将这个依据分隔符进行分割,并得到转行的结果。 表数据: 期望结果: 实现方法: SELECT a.id, substring_index( substring_index...
  • 业务开发中由于数据库设计有缺陷, 导致一个中存储了个值。这种情况下,在业务开发过程中, 需要将转换为行。进行操作。 如: image.png Goole 得: select a.ID,substring_index(substring_index(a.app_...
  • 需求:按照分组,将条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district] [nvarchar](255) NULL,[town] [nvarchar](255) NULL); insert into t2 values(1,'淮上区...
  • 一条项目可能有个人进行管理,也就是有可能是一个项目经理管理4到5个项目成员,业务人员要求导出excel,需要在一行中能可看到项目的所有信息,包括项目编号、项目名称、项目经理、项目成员A等信息,我的数据库设计...
  • 工作中经常需要用到hive或者mysql去查同事需要的数据,而他们发来的判断名单一般都是excel,添加字符串还好办,但是一旦数据了,形式就很不方便。 所以自己用php写了个网页工具,能够直接把excel的数据转行成...
  • 最近遇到个需求,需要将多表多行多列的值转换成一个字符串输出,然后大家纷纷自己写,有的在数据库里用游标,有的在java中写循环,都比较耗时间。大概想了一下,在数据库中处理效率应该比较高,然后最好是能提供一个...
  • mysql 多行合并操作

    2018-10-14 11:32:50
    我的个人理解:mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: ...
  • 数据库有很种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。 ​ 数据库现在已经成为数据管理的重要技术,也是计算机的重要分支。由于数据库具有...
  • 转列转行查询

    2020-12-30 17:18:16
    一、行转列:将原来同一多行的不同内容作为个字段,输出对应内容 数据库表中的内容: 转换后: 解析:  行转列是将原来的subject字段的多行内容选出来,作为结果集中的不同,并根据code进行分组...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 204
精华内容 81
关键字:

数据库多行转多列