SQL交叉表实例

很简单的一个东西,见网上好多朋友问“怎么实现交叉表?”,以下是我写的一个例子,数据库基于SQL SERVER 2000。

-- ======================================================

--交叉表实例

-- ======================================================

建表:

在查询分析器里运行:

CREATE TABLE [Test] (

[id] [int] IDENTITY (1, 1) NOT NULL ,

[name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

[subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

[Source] [numeric](18, 0) NULL

) ON [PRIMARY]

GO

INSERT INTO [test] ([name],[subject],[Source]) values (N‘张三‘,N‘语文‘,60)

INSERT INTO [test] ([name],[subject],[Source]) values (N‘李四‘,N‘数学‘,70)

INSERT INTO [test] ([name],[subject],[Source]) values (N‘王五‘,N‘英语‘,80)

INSERT INTO [test] ([name],[subject],[Source]) values (N‘王五‘,N‘数学‘,75)

INSERT INTO [test] ([name],[subject],[Source]) values (N‘王五‘,N‘语文‘,57)

INSERT INTO [test] ([name],[subject],[Source]) values (N‘李四‘,N‘语文‘,80)

INSERT INTO [test] ([name],[subject],[Source]) values (N‘张三‘,N‘英语‘,100)

Go

交叉表语句的实现:

--用于:交叉表的列数是确定的(用了这个很不错!)

select name,sum(case subject when ‘数学‘ then source else 0 end) as ‘数学‘,

sum(case subject when ‘英语‘ then source else 0 end) as ‘英语‘,

sum(case subject when ‘语文‘ then source else 0 end) as ‘语文‘

from test

group by name

--用于:交叉表的列数是不确定的

不确定列,字段2的值范围不固定。

create table a

(id VARchar(4),

F2 VARCHAR(2),

F3 INT)

insert a(ID,F2,F3)

select ‘A001‘,‘01‘,12

UNION ALL SELECT ‘A001‘,‘02‘,24

UNION ALL SELECT ‘A002‘,‘01‘,10

UNION ALL SELECT ‘A002‘,‘03‘,5

UNION ALL SELECT ‘A003‘,‘02‘,6

UNION ALL SELECT ‘A004‘,‘04‘,13

--SELECT * FROM A

--不确定列数

declare @sql varchar(8000)

set @sql = ‘select ID,‘

select @sql = @sql + ‘sum(case F2 when ‘‘‘ +F2+‘‘‘

then F3 else ‘‘‘‘ end) as ‘‘‘+ ‘字段(‘+F2+‘)‘‘,‘

from (select distinct F2 from A) as B

select @sql = left(@sql,len(@sql)-1) + ‘ from A group by ID‘

--PRINT @SQL

exec(@sql)

go

==============================================================================

交叉表:

CREATE TABLE Test(字段1 VARCHAR(10),字段2 VARCHAR(10),字段3 VARCHAR(10))

INSERT Test SELECT ‘a001‘, ‘01‘ , 12

UNION ALL SELECT ‘a001‘, ‘02‘ , 24

UNION ALL SELECT ‘a002‘, ‘01‘ , 10

UNION ALL SELECT ‘a002‘, ‘03‘ , 5

UNION ALL SELECT ‘a003‘, ‘02‘ , 6

UNION ALL SELECT ‘a004‘, ‘04‘ , 13

SELECT * FROM Test

SELECT 字段1,

[字段(01)]=MAX(CASE WHEN 字段2 =‘01‘ THEN 字段3 ELSE ‘‘ END),

[字段(02)]=MAX(CASE WHEN 字段2 =‘02‘ THEN 字段3 ELSE ‘‘ END),

[字段(03)]=MAX(CASE WHEN 字段2 =‘03‘ THEN 字段3 ELSE ‘‘ END),

[字段(04)]=MAX(CASE WHEN 字段2 =‘04‘ THEN 字段3 ELSE ‘‘ END)

FROM Test

GROUP BY 字段1

mysql行转列sql函数_(转)行变列SQL语句(MSSQL) - jack - 博客园相关推荐

  1. android 有vi命令行,vi命令详解_游离在Android与ios之间的技术博客_51CTO博客

    vi 简易说明 要管理好 Linux 系统﹐少不了要对设定档案进行编辑,如果您用惯了 Microsoft Word 或 Corel Wordperfect 的话,除了 Xwindows 里面的编辑程式 ...

  2. 监控 SQL Server (2005/2008) 的运行状况--来自微软TetchNet - 邀月 - 博客园

    邀月工作室 监控 SQL Server (2005/2008) 的运行状况--来自微软TetchNet 原文地址: http://technet.microsoft.com/zh-cn/library ...

  3. java求数组中满足给定和的数对_关于数组的几道面试题 - zdd - 博客园

    2011年2月15日更新,加入找出绝对值最小的元素一题 数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考,如果您有更好的题目或者想法,欢迎留言讨论.目前有以下1 ...

  4. Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON() ~~~~~(转自残剑博客园)

    一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功后的回调函数,该 ...

  5. java httpclient 采集_使用java HttpClient 与Web服务器交互 - elliott - 博客园

    下面程序想自动登陆系统: public static void main(String[] args) throws Exception{ HttpClient client = new HttpCl ...

  6. 经典SQL语句大全-【转载自】博客园,作者博客:YuBinfeng's Technology Blog

    因最近学习MySQL,闲来无事逛帖子时,发现这篇较为经典的博客,特转载以防备用学习,同时希望也可以帮到他人,废话不多说,进入正文  一.基础 1.说明:创建数据库 CREATE DATABASE da ...

  7. 详细分析MySQL的日志(一)本文原创地址:博客园骏马金龙https://www.cnblogs.com/f-ck-need-u/p/9001061.html

    本文原创地址:博客园骏马金龙https://www.cnblogs.com/f-ck-need-u/p/9001061.html 官方手册:https://dev.mysql.com/doc/refm ...

  8. 改进博客园Markdown显示功能(加代码行号、显示代码所用编程语言)

    博客园的markdown模式下的代码高亮功能使用的是highlight.js,没有行号和显示相应编程语言的功能,只好自己将其改造了一下(将这两种功能一并实现了)~ 先看一下效果,再详细介绍方法~ 查看 ...

  9. dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...

    opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...

  10. nodejs爬虫与python爬虫_【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」

    写这篇 blog 其实一开始我是拒绝的,因为爬虫爬的就是cnblog博客园.搞不好编辑看到了就把我的账号给封了:). 言归正传,前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 ph ...

最新文章

  1. 基于Spark的机器学习实践 (九) - 聚类算法
  2. 直播预告:基于强化学习的关系抽取和文本分类 | PhD Talk #18
  3. JDBC(九)DatabaseMetaData 数据库元数据
  4. 分别安装搭建lamp服务环境
  5. 蓝牙设备一键切换工具ToothFairy for Mac中文
  6. Android IntentService的使用和源代码分析
  7. 【TWVRP】基于matlab遗传算法和模拟退火求解带时间窗自行车调度问题【含Matlab源码 370期】
  8. 嵌入式开发实践系列文章 - 目录
  9. arduino蓝牙通讯代码_arduino蓝牙通讯
  10. Cadence导出Excel格式BOM表
  11. FPGA零基础学习:FPGA芯片简介
  12. 必看五大安全趋势 Fortinet全球威胁态势报告发布
  13. 第22节 NAT——实现公私有IP地址转换
  14. RequestMapping的映射URL模板
  15. 保险丝选型8大考虑要素
  16. win11电脑锁定触摸板或无鼠标打开触摸板
  17. SWING实现类似微信的泡泡聊天界面
  18. inplace = True 是什么意思
  19. 韦东山ARM第一期作业(三)内存控制器和SDRAM
  20. ## 三天打鱼两天晒网问题

热门文章

  1. L1-041 寻找250 (10 分)—团体程序设计天梯赛
  2. MTK平台camera驱动架构分析
  3. 【基础】位与运算与取余
  4. React Native npm镜像安装命令
  5. 摘录 vue.js代码片段的理解
  6. C++ unordered_map 在key为string类型和char*类型时测试时间性能差异
  7. $《第一行代码:Android》读书笔记——第5章 Broadcast
  8. 蛇形填数 ------- 模拟水题
  9. Android Fragment-APP调用其他APP中的Fragment 1
  10. 在linux系统下安装oracle前的准备工作(配置oracle环境变量)