之前写过一篇文章是专门说明对于固定列如何进行行列转换,也就是说最终期望的结果集的列是固定,例如期望的结果是各个城市一年之中每个月的经济量,这个很好做,按照我之前写的文章操作即可。现在有种情况就是期望的结果列不固定,例如求某个月各个城市每天的经济量,由于月有的是30天有的是31天,这样就导致无法确定列,用之前的方法显然搞不定。那么这个时候我们就需要采用动态SQL去实时的拼接列名。

创建表语句

USE [master]

GO

/****** Object: Table [dbo].[Table_4] Script Date: 08/09/2013 16:05:28 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Table_4](

[time] [datetime] NULL,

[City] [varchar](10) NULL,

[count] [int] NULL

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

插入测试数据

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-01 00:00:00.000','北京市',14);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-01 00:00:00.000','天津市',92);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-01 00:00:00.000','上海市',8);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-01 00:00:00.000','大连市',3);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-01 00:00:00.000','无锡市',142);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-01 00:00:00.000','深圳市',4);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-01 00:00:00.000','南京市',1);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-02 00:00:00.000','北京市',11);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-02 00:00:00.000','天津市',79);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-02 00:00:00.000','上海市',3);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-02 00:00:00.000','无锡市',92);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-02 00:00:00.000','深圳市',4);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-03 00:00:00.000','北京市',10);

insert into [master].[dbo].[Table_4] ([time],[City],[count]) values( '2013-07-03 00:00:00.000','天津市',80);

原始表查询结果

期望的结果是按城市统计每个城市每天的经济量

这个地方时间是不固定的,因为每个月的天数不一样,因此下面采用动态拼接列的方式实现

Declare @sql varchar(max)

set @sql=STUFF((select ','+QUOTENAME(CONVERT(varchar(10),[time],120)) from [Table_4] group by [time] FOR XML PATH('')) ,1,1,'')

set @sql='select * from [Table_4] t

pivot (sum([count])for [time] in ('+@sql+')) a '

exec(@sql)

这里有必要讲解几个关键字

SELECT stuff('NBA',1,1,'C')

这个结果就是CBA,该函数主要起到替换字符的作用,第一个参数是待被替换的字符串,第二个参数是替换的起点,第三个参数是从起点开始多少个字符将被替换,第四个参数是要替换的字符串。

QUOTENAME关键字用来给名称加上[],对于时间必须要加上这个,否则不知道其为列名

FOR XML PATH('')这个可以将查询到的结果集转换为XML文档格式的字符串

最后附上另外一篇讲解如何对于固定列进行行列转换的文章

java行列转置_行列转换之列不固定相关推荐

  1. Excel行列转置(行数据与列数据的转换)

    Excel行列转换的方法就是选择性粘贴. 将以行形式存储的数据复制后,选中其他空白单元格,右键,选择"选择性粘贴",打开"选择性粘贴"对话框,勾选"转 ...

  2. java 矩阵转置_图解利用Java实现数组转置

    我们编写Java代码,如下图所示: package com.tina; public class demo { public static void main(String args[]) { int ...

  3. 温度转换java小程序_温度转换小程序--JavaFX

    作为一名Java语言的初学者,最近在学习JavaFX,看到CSDN上用swing实现GUI简单功能的小程序居多,于是想着用JavaFX来实现下,选了个极为简单的温度转换程序,折腾了快一天吧,总算是写完 ...

  4. Hive-day06基本函数_窗口函数_行列转换_UDF_连续登录问题

    hive-基本函数_窗口函数_行列转换_UDF_连续登录问题 目录 hive-基本函数_窗口函数_行列转换_UDF_连续登录问题 SQL练习 hive语句的执行顺序 from-->join--& ...

  5. C语言试题二十七之请编写程序,实现矩阵(3行3列)的转置(即行列互换)。

    1. 题目 请编写一个函数function(int array[3][3]),实现矩阵(3行3列)的转置(即行列互换). 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中 ...

  6. excel行列互换_办公软件操作技巧043:如何在excel中实现行列转置

    在日常工作中,有时我们需要将excel表格数据的行列进行转置,也就是把行列的数据互换,如下图所示,今天我们就来分享在excel中进行行列转置方法. 行列转置 方法一:复制粘贴法 第1步:选中表格数据- ...

  7. sql如何实现明细账_SQL 如何实现动态的行列转置

    Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如: 想转置成: 这个难点在于事先不知道有多少种收入来源,而且每 ...

  8. oracle整张表转置,从Oracle表格行列转置说起...

    从Oracle表格行列转置说起... 当你面对如下格式的一个表格:NO为人员的ID,MONEY是收入,DAY是星期(1代表星期一,7代表周日). NO MONEY DAY 1 23 1 1 43 2 ...

  9. sql 转置_SQL 如何实现动态的行列转置

    Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如: 想转置成: 这个难点在于事先不知道有多少种收入来源,而且每 ...

最新文章

  1. phpwind html5,PHPWIND 5.3 运行代码 功能实现代码
  2. linux ps1 目录颜色,Linux下PS1终端下的颜色设置
  3. CF1361C. Johnny and Megan‘s Necklace(构造,欧拉回路,传递闭包)
  4. Java 中的 String 真的是不可变的吗
  5. python程序框架的描述_简单介绍Python下自己编写web框架的一些要点
  6. oracle orm 实例 java_Oracle数据库的JDBC查询实例
  7. 谁是三国跳槽王:吕布成毫无规划的跳槽者
  8. L3-019 代码排版 (30 分)-PAT 团体程序设计天梯赛 GPLT
  9. (转)基于Ajax的应用程序架构汇总
  10. 2018.3.29亚信科技笔试
  11. 智能优化算法:混合蛙跳算法-附代码
  12. 讨论一下hibernate如何动态注册一个动态生成的实体类
  13. MybatisPlus自定义sql分页查询
  14. 金格集成(springboot+vue)
  15. 用C语言实现C++ 继承与多态
  16. 小米官网竖直导航栏html,手把手教你做小米商城顶部导航栏
  17. [每天一个知识点]25-职业生涯-核桃皮是当水果吃好还是当蔬菜吃好?
  18. linux文件恢复工具下载_十大最佳Linux数据恢复工具,用于恢复已删除/损坏的文件(包括优盘,部分工具不支持FAT32等格式)
  19. 常用邮箱大全,申请邮箱收费吗?邮箱活动有哪些?
  20. 【MySQL数据库】 - 复杂查询(二)

热门文章

  1. Android开发真等于废人?再不刷题就晚了!
  2. 设计模式与足球(一)
  3. 修改家中的WiFi密码
  4. 计算机ROM术语,计算机RAM amp; ROM常见词汇
  5. Deep learning翻译
  6. 四年级英语计算机,小学四年级英语期中考试真题
  7. html div 凸起,HTML5 圆形柔性凸起
  8. 日趋“四低”的智能手环,出路在哪?
  9. 硕士导师每个月补贴_每个软件开发人员需要的五位导师以及如何找到他们
  10. ARM---异常和特权