在mysql表中如何变换列和行_在SQL中转换列和行的简单方法?

有几种方法可以转换这些数据。在你最初的帖子中,你说PIVOT对于这个场景来说似乎太复杂了,但是可以很容易地使用UNPIVOT和PIVOTSQL Server中的函数。

但是,如果您无法访问这些函数,则可以使用UNION ALL到UNPIVOT然后是一个具有CASE向PIVOT:

创建表:CREATE TABLE yourTable([color] varchar(5), [Paul] int, [John] int, [Tim] int, [Eric] int);INSERT INTO yourTable

([color], [Paul], [John], [Tim], [Eric])VALUES

('Red', 1, 5, 1, 3),

('Green', 8, 4, 3, 5),

('Blue', 2, 2, 9, 1);

UNION All,聚合和案例版本:select name,

sum(case when color = 'Red' then value else 0 end) Red,

sum(case when color = 'Green' then value else 0 end) Green,

sum(case when color = 'Blue' then value else 0 end) Bluefrom(

select color, Paul value, 'Paul' name  from yourTable  union all

select color, John value, 'John' name  from yourTable  union all

select color, Tim value, 'Tim' name  from yourTable  union all

select color, Eric value, 'Eric' name  from yourTable) srcgroup by name

这个UNION ALL执行UNPIVOT通过转换列来对数据进行转换。Paul, John, Tim, Eric分成几排。然后应用聚合函数。sum()带着case语句获取每个列的新列。color.

枢轴和枢轴静态版本:

双双UNPIVOT和PIVOTSQL Server中的函数使这种转换更加容易。如果您知道要转换的所有值,可以将它们硬编码到静态版本中以获得结果:select name, [Red], [Green], [Blue]from(

select color, name, value  from yourtable  unpivot

(

value for name in (Paul, John, Tim, Eric)

) unpiv) srcpivot(

sum(value)

for color in ([Red], [Green], [Blue])) piv

对象的内部查询。UNPIVOT执行与UNION ALL..它获取列的列表并将其转换为行,PIVOT然后执行最后的列转换。

动态透视版本:

如果有未知数量的列(Paul, John, Tim, Eric(在您的示例中),然后要转换的颜色数目未知,您可以使用动态SQL将列表生成为UNPIVOT然后PIVOT:DECLARE @colsUnpivot AS NVARCHAR(MAX),

@query  AS NVARCHAR(MAX),

@colsPivot as  NVARCHAR(MAX)select @colsUnpivot = stuff((select ','+quotename(C.name)

from sys.columns as C         where C.object_id = object_id('yourtable') and

C.name <> 'color'

for xml path('')), 1, 1, '')select @colsPivot = STUFF((SELECT  ','

+ quotename(color)

from yourtable t            FOR XML PATH(''), TYPE            ).value('.', 'NVARCHAR(MAX)')

,1,1,'')set @query

= 'select name, '+@colsPivot+'

from

(

select color, name, value

from yourtable

unpivot

(

value for name in ('+@colsUnpivot+')

) unpiv

) src

pivot

(

sum(value)

for color in ('+@colsPivot+')

) piv'exec(@query)

动态版本同时查询两个yourtable然后sys.columns表生成项的列表。UNPIVOT和PIVOT..然后将其添加到要执行的查询字符串中。动态版本的优点是如果您有一个更改列表colors和/或names这将在运行时生成列表。

这三个查询都将产生相同的结果:

| NAME | RED | GREEN | BLUE |

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

| Eric |   3 |     5 |    1 |

| John |   5 |     4 |    2 |

| Paul |   1 |     8 |    2 |

|  Tim |   1 |     3 |    9 |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powerpoint文字教程

建立空白演示文稿 如果所有模板都不满足要求&#xff0c;或者想制作一个特殊的、具有与众不同外观的演示文稿&#xff0c;可从一个空白演示文稿开始&#xff0c;自建背景设计、配色方案和一些样式特性。选择“空演示文稿”选项&#xff0c;或者在PowerPoint 2000窗口中&#xf…

不同语言,系统通过共享内存方式实现信息交互

1. 两个程序映射同一个文件到自己的地址空间2. 进程A先运行, 每隔两秒读取映射区域, 看是否发生变化. 3. 进程B后运行, 它修改映射区域, 然后推出, 此时进程A能够观察到存储映射区的变化一个读&#xff0c;一个写。转载于:https://www.cnblogs.com/swbzmx/p/5992679.html

如何使用用window.open()

oNewWindow window . open ( sURL , sName , sFeatures , bReplace ) 参数&#xff1a;sUrl : 可选项。字符串(String)。指定要被加载的HTML文档的 URL 地址。假如无指定值&#xff0c;则 about:blank 的新窗口会被显示。 sName : 可选项。字符串(String)。 指定打开的窗口…

mysql myisam/innodb高并发优化经验_MySQL MyISAM / PHP 高并发优化经验

最近做的一个应用&#xff0c;功能要求非常简单&#xff0c;就是 key/value 形式的存储&#xff0c;简单的 INSERT/SELECT&#xff0c;没有任何复杂查询&#xff0c;唯一的问题是量非常大&#xff0c;如果目前投入使用&#xff0c;初期的单表 insert 频率约 20Hz(次/秒&#xf…

SharePoint Framework 构建你的第一个web部件(三)

&#xfeff;&#xfeff;博客地址&#xff1a;http://blog.csdn.net/FoxDave本篇接上一讲&#xff0c;我们一起来看一下如何部署和测试本地开发的web部件。在SharePoint中预览web部件SharePoint工作台在SharePoint中被承载&#xff0c;用来在开发环境预览和测试本地web部件。它…

execCommand全集

JavaScript中的execCommand介绍 execCommand方法是执行一个对当前文档&#xff0c;当前选择或者给出范围的命令。处理Html数据时常用如下格式&#xff1a;document.execCommand(sCommand[,交互方式, 动态参数]) &#xff0c;其中&#xff1a;sCommand为指令参数&#xff08;如…

mysql my.ini位置错误_解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪...

数据库数据量很大的数据库导入到本地时&#xff0c;会等很久&#xff0c;然而等很久之后还是显示失败&#xff1b;这是就要看看自己本地的没mysql是否设置了超时等待&#xff0c;如果报相关time_out这些&#xff0c;可以把mysql.ini尾部添加max_allowed_packet、interactive_ti…

poj3186 Treats for the Cows(区间)

题目链接&#xff1a;http://poj.org/problem?id3186 题意&#xff1a;第一个数是N&#xff0c;接下来N个数&#xff0c;每次只能从队列的首或者尾取出元素。 ans每次取出的值*出列的序号。求ans的最大值。 样例 &#xff1a; input&#xff1a;5 1 2 1 5 2 output&#xff1a…

php5.2.5 mysql_IIS6 下安裝 PHP5.2.5 和 MySQL5.0 及概念澄清

假設 PHP 文件夾位於 D:/php_forIIS。1&#xff0c;php.ini 一定要拷貝到 Windows 文件夾下(重要且必須)。而 PHP4.x 版本可以不用這么做。在 Windows2003 Apache2.2 PHP5.x 下&#xff0c;也不用這么做。注意 extension 的加載配置&#xff1a;extension_dir "D:/php_…

OpenCV人脸检测并把图片写成avi视频

读出某一个文件夹下“jpg”后缀的全部图片后&#xff0c;用的OpenCV自带的人脸检测检测图片中的人脸&#xff0c;调整图片的大小写成一个avi视频。 主要是要记录一下CvVideoWriter的用法和如何从文件夹中读取某一后缀的全部文件。 代码&#xff1a; #include "stdafx.h&qu…

TextArea换行 滚动条

换行"\r\n" 滚动条自动滚动到结尾document.form1.text_information.doScroll(down); 滚动条顶部坐标document.form1.text_information.scrollTop; textarea自动滚动到结尾function add_information(info)//添加信息{ document.form1.text_information.valuedocument.…

leetcode83,删除有序链表中的重复元素

Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3. 难点就一个&#xff0c;就是要考虑到连续3个和3个以上的情况。 …

javascript各种事件

事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event.x event.y 窗…

mysql limit asc_MySql sql优化之order by desc/asc limit M-阿里云开发者社区

Order by desc/asc limit M是我在mysql sql优化中经常遇到的一种场景&#xff0c;其优化原理也非常的简单&#xff0c;就是利用索引的有序性&#xff0c;优化器沿着索引的顺序扫描&#xff0c;在扫描到符合条件的M行数据后&#xff0c;停止扫描&#xff1b;看起来非常的简单&am…

Spring 4 官方文档学习(十)数据访问之JDBC

说明&#xff1a;未修订版&#xff0c;阅读起来极度困难 1、Spring框架JDBC的介绍 Spring JDBC - who does what? 动作Spring你定义连接参数 是打开连接是 指定SQL语句 是声明参数&#xff0c;提供参数值 是准备、执行语句是 迭代结果&#xff08;如果有&#xff09;是 操作每…

fopen -- 打开文件或者 URL

fopen (PHP 3, PHP 4, PHP 5) fopen -- 打开文件或者 URL 说明 resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] ) fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式&am…

mysql 性能状态_MySQL获取系统性能和状态_MySQL

bitsCN.comMySQL获取系统性能和状态#!/bin/ksh INTERVAL5 PREFIX$INTERVAL-sec-status touch /tmp/running RUNFILE/tmp/running my -e show global variables >> mysql-variables while test -e $RUNFILE; do file$(date %F_%I) sleep$(date %s.%N | awk "{print $…

洛谷P3392 涂国旗

P3392 涂国旗 107通过507提交题目提供者kkksc03标签难度普及-提交 讨论 题解 最新讨论 直接读字符会waWA?--为什么不对。。。跪求找错快点给钱这不就是荷兰国旗问题吗题目描述 某国法律规定&#xff0c;只要一个由N*M个小方块组成的旗帜符合如下规则&#xff0c;就是合法的…

php小问题

///PHP显示错误;display_errors Offdisplay_errors on ///PHP截取字符串$str1234567890;怎么从左边第二位截取到右边数第二位&#xff1f;取其中间。 $str 1234567890;print substr($str, 1, strlen($str)-2); ///php获取时间date("Y年m月d日"); 2008年4月6日date…

mysql5.7.11 创建用户_修改更新查找MySQL5.7.x的root用户的默认密码

最近新安装了wamp3.0.4里面附带的mysql已经升级到了5.7版本了。MySQL5.7在性能方面有很大的提升。安装成功之后默认root的密码为空能登录。但是正常情况下需要给root重新设置新的密码。对于MySQL5.7版本来说和之前的5.6及以下版本的user表不一样了(user表里面没有了password这个…