/*范例表
create table 表1 (
號數 char(10),
成績 integer,
科目 char(10) )
insert into 表1 select '1',60,'数学'
union select '1',43,'物理'
union select '1',100,'语文'
union select '2',87,'语文'
union select '2',99,'数学'
union select '2',89,'物理'
union select '2',87,'语文'
*/
Create procedure RowToColumn
@Table varchar(30), --表名
@MasterField varchar(30), --待转名称列名 char字段
@SlaveField varchar(30), --待转数据列名 int型字段
@GroupID varchar(30) --分组ID
as
--调用方法 RowToColumn '表1','科目','成績','號數'
--by jinjazz 环境 SQLServer2000
begin
DECLARE @mSQL VARCHAR(8000)
set @msql = 'DECLARE @SQL VARCHAR(8000)'
set @msql = @msql + ' set @SQL= ''select ' + @GroupID + ''''
set @msql = @msql + ' SELECT @SQL= @SQL+'',max(CASE WHEN ' +
@MasterField + '=''''''+' + @MasterField + '+'''''' then ' + @SlaveField +
' else 0 end )[''+' + @MasterField + '+'']'' from(select distinct ' +
@MasterField + ' from ' + @Table + ') a'
set @msql = @msql + ' SET @SQL=@SQL+ '' from ' + @Table + ' group by ' +
@GroupID + ''''
set @msql = @msql + ' exec(@SQL)'
exec(@msql)
end
SQL 分组 行变列的一个例子
(SQL SERVER 2000 測試OK)
1. 表格A原始数据如下:
CREATE TABLE [dbo].[A] (
[C1] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL ,
[C2] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL ,
[C3] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL ,
[C4] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL
)
insert into A ('95533','SZ','44','123000')
insert into A ('95566','SZ','44','233300')
insert into A ('95588','GZ','44','4566')
insert into A ('95599','GZ','44','456666')
insert into A ('95533','ZH','44','333333')
insert into A ('95577','DG','44','555555')
insert into A ('95588','ST','44','44444')
2. 分组行变列 处理数据:
DECLARE @SQL VARCHAR(4000)
SET @SQL='SELECT C2'
SELECT @SQL= @SQL+ ',max(CASE WHEN C1 = ''' + C1 + ''' THEN C4 ELSE 0 END) ['+C1+']' FROM (SELECT DISTINCT C1 FROM A) TAB
SET @SQL=@SQL+ ' FROM A GROUP BY C2'
EXEC (@SQL)
得到如下结果:
C2 95533 95566 95577 95588 95599
--------------------------------------------
DG 0 0 555555 0 0
GZ 0 0 0 4566 456666
ST 0 0 0 44444 0
SZ 123000 233300 0 0 0
ZH 333333 0 0 0 0
OK, 分组就这样完成了.
参考经典实例:
/* 实例一
create table t (id int identity,name varchar(10),code int)
insert t values('人口',20)
insert t values('经济',12)
insert t values('文化',15)
insert t values('土地',45)
declare @sql varchar(1000)
set @sql = ''
select @sql = @sql+name+'=max(case when name='''+name+''' then code else null end),' from t
--print @sql
set @sql = left(@sql,len(@sql) - 1)
set @sql = 'select [姓名]=''年龄'', '+@sql+' from t'
exec (@sql)
--drop table t
实例二
create table #(a varchar(100),b int)
insert # values('aa',11)
insert # values('bb',1)
insert # values('aa',45)
insert # values('cc',81)
insert # values('a',11)
insert # values('aay',561)
insert # values('a',14)
declare @sql varchar(8000)
set @sql = 'select '
select @sql = @sql + 'sum(case a when '''+a+'''
then b else 0 end) '+a+'的数量,'
from (select distinct a from #) as a
select @sql = left(@sql,len(@sql)-1) + ' from #'
exec(@sql)
-- drop table #
*/
分享到:
相关推荐
交叉查询经典 交叉表是一种特殊的数据表格,它可以根据指定的条件返回值,并且显示在压缩行和列中。这使得数据的比较和趋势分析变得更加容易。交叉表由三个元素组成:行、列和摘要字段。 行是交叉表的水平方向延伸...
这个查询的可扩展性很强,因为它不依赖于特定的列数,而是根据`n_sec_code`和`c_researcher_code`进行动态处理。只需将`n_sec_code`、`c_researcher_code`和`m_researcher_stock_rel`替换为你自己的列名和表名,即可...
在制作交叉表时,重点属性包括行分组、列分组以及数据统计。通过修改这些属性,可以在Row_groups和Column_groups中对数据进行排序和统计,从而得到更加准确和清晰的报表。 总结来说,在iReport中绘制柱状图和交叉表...
在SQL Server中,交叉表查询(也称为PIVOT查询)是将行数据转换为列数据的一种方法。这种查询在数据分析和报表制作中非常常见,因为它可以将多个行记录的数据整理成更易于阅读的格式。在Access中,可以通过TRANSFORM...
交叉表查询,也称为透视表或转置查询,允许用户将数据按照不同的列和行进行汇总,以揭示更深层次的模式和趋势。 在C#中实现动态交叉表查询,主要涉及到以下几个方面: 1. **ADO.NET**:这是Microsoft提供的一个...
在CXGrid中,你可以自定义行、列的颜色,以提高界面的可读性和美观度。以下是一些关键步骤: 1. **设置行颜色**:你可以通过调整`TcxGrid`的`Level`对象来改变行的颜色。例如,你可以访问`cxGrid1.MainView.Levels...
- **子查询的使用场合**:当查询依赖于另一个查询的结果时,子查询变得非常有用。它可以将复杂的查询逻辑分解为更小、更易管理的部分,使查询更加清晰、高效。 - **子查询的规则**: - 子查询必须用括号括起来。 ...
3. **设置交叉表结构**:指定行标题(如学号)、列标题(如课程名称)以及值字段(如学分)。 4. **命名查询**:将查询命名为“总表”或其他有意义的名字。 5. **运行查询**:查看交叉表查询的结果,它将显示每位...
CSS Grid由一系列行和列定义,每个交叉点形成一个单元格,元素可以在这些单元格中对齐和扩展。与传统的流式布局和Flexbox相比,Grid更适用于创建响应式和自适应的设计。 二、LESS预处理器 LESS是一种CSS预处理器,...
rs.moveprevious 将记录指针从当前的位置向上移一行 rs.movefirst 将记录指针移到数据表第一行 rs.movelast 将记录指针移到数据表最后一行 rs.absoluteposition=N 将记录指针移到数据表第N行 rs.absolutepage=N 将...
3. **交叉表查询**:用于统计分析,将数据按行和列排列,并在交叉点计算统计值,如总和、平均值等。 4. **操作查询**:包括生成表、删除、更新和追加四种操作。生成表查询用于创建新表,删除查询用于移除记录,更新...
多表连接查询是SQL中最常用也是最强大的功能之一,它使得从多个表中提取相关联的数据变得简单有效。通过理解连接的概念、掌握各种连接语法和技术,可以大大提高数据查询的灵活性和效率。无论是在日常的数据管理工作...
交叉连接(CROSS JOIN)返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 在实际应用中,SQL连接查询可以用来...
在每个循环中,我们检查行线是否由低变高,因为这表示有按键被按下。如果检测到变化,我们可以通过交叉点来确定是哪个按键。 在汇编源程序中,常见的指令包括: 1. `MOV`:用于移动数据,如设置列线的输出状态。 2...
但当我们面临需求变化,或者需要根据多列或动态列进行分组时,这就变得复杂了。 在SQL Server中,我们可以使用动态SQL来解决这个问题。动态SQL允许我们在运行时构建和执行SQL语句,这样就可以在不知道具体分组列的...
例如,当屏幕尺寸变小时,可以通过媒体查询更改列的布局,使它们堆叠在一起,以适应移动设备。 总结来说,“flexboxTemplate1”是一个很好的学习资源,它展示了如何使用Flexbox和HTML构建一个响应式的2列3行布局。...
比如在上例中,对于一个包含1000行的表,使用索引可以避免全表扫描,提高查询效率至少100倍。 不过,索引并不总是带来性能提升。在某些情况下,索引可能会导致额外的存储开销和维护成本,特别是对于频繁更新的表,...
交叉报表能够根据多个维度对数据进行分析,如行和列的组合,提供更深入的数据洞察。 总的来说,iReport通过参数、数据集和表格的巧妙组合,为报表设计提供了极大的灵活性和实用性。掌握这些基本元素的使用方法,将...
六种关联查询是:交叉连接、内连接、外连接、联合查询、全连接、交叉连接。每种查询都有其特点和使用场景。 varchar(50) 中的 50 表示字段最多存放 50 个字符。int(20) 和 char(20) 以及 varchar(20) 的区别在于,...