有同学问了个比较典型行列转换的问题,想想,解答如下:
数据库有一张表:

是个公司采购表,想转化成如下报表,显示每个公司各采购了些什么产品:

哪些公司采购哪些产品是不确定的,所以报表的列有哪几项是不确定的,
我想了很久也没什么好方法,请问有办法吗?

解题思维步骤:

  1. 先找到未行列转换的数据,分组查看数据试试:
    select CompanyName,ProductName,COUNT(*)as num from dbo.Orders group by ProductName,CompanyName order by CompanyName
  2. 去看看我给你们的分页存储过程,看看拼接sql语句字符串和执行的过程,然后把思路打开一下试试
  3. 两者结合起来,答案:

1 declare @sql varchar(8000)--声明一个字符串变量
2 set @sql='select CompanyName,'--开始设置语句
3 --------动态生成语句begin(开始转成列)-----
4 select @sql=@sql+'sum(case when ProductName='''+ProductName+''' then num else 0 end)['+ProductName+'],'
5 from (select distinct top 100 percent ProductName from Orders order by ProductName)a
6 --------动态生成语句 end--------------------
7 set @sql =left(@sql,len(@sql)-1)+' from (select CompanyName,ProductName,COUNT(*)as num 
from dbo.Orders group by ProductName,CompanyName)a group by CompanyName'
8 print @sql --打印输出最终执行的SQL
9 exec(@sql)--执行SQL字符串

最新文章

  1. Codeforces Round #354 (Div. 2) ABCD
  2. 【工匠大道】一些Vim(Linux)不常见但很逼格的命令(不断更新中)
  3. 使用axis2 soapmonitor监控soap数据
  4. sublime 工具构建
  5. 扩展jquery的选择器
  6. code project 上的内存管理的示例代码
  7. CentOS7搭建hadoop2.6.4双节点集群
  8. 团队开发——冲刺1.c
  9. 浅谈WeakHashMap
  10. ORACLE SELECT INTO NO_DATA_FOUND问题
  11. 【译】 AWK教程指南
  12. 第三方 XListview 上拉加载、下拉刷新、分页加载和Gson解析
  13. [转]Android 如何对sqlite数据库进行增删改[insert、update和delete] 操作
  14. AngularJS进入使用前的准备工作
  15. cycript
  16. .net分布式压力测试工具(Beetle.DT)
  17. java8list排序
  18. MachineLearningOnCoursera
  19. Tomcat 服务器安装 SSL证书,实现 HTTP 自动跳转 HTTPS
  20. 【Mysql】—— MySQL存储引擎中的MyISAM和InnoDB区别详解

热门文章

  1. MYSQL 备份工具
  2. Ruby on Rails Tutorial 第一章 之 Heroku部署
  3. javascript 实现htmlEncode htmlDecode
  4. 在Linux里读取UBOOT环境变量
  5. QTP 中对象操作
  6. 使用OPC的方式去连接PLC进行AB SLC-5_04数据的采集
  7. linux- svn服务器
  8. Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
  9. 有关ftp4j的FTPListParseException异常
  10. 向MyEclipse添加Oracle数据库