SQL Server2005 中用 Pivot 生成交叉表
最近在做一个数据统计,要求对一个表中的数据按照两个维度呈现,也就是传统的交叉表
比如,有一个问题表,有三个字段,(标题、问题类别、问题状态)
要求按照不同的类别,分别统计处各个状态的问题数量(如:产品问题中未处理的数量、服务问题中遗留问题数量等等)。
经过查找和尝试,终于生成了结果,现在分享给大家。
通过 Sql 2005 中的 Pivot 函数,可以方便的制作交叉表。
关于Pivot的用法,就不详细说了,大家可以百度一下,或者看sql server的帮助文档
下面是代码部分
--问题分类表
CREATE TABLE [dbo].[QuestionClass](
[QuestionClassID] [int] IDENTITY(1,1) NOT NULL,
[QuestionClassName] [nvarchar](50) NULL,
CONSTRAINT [PK_QuestionClass] PRIMARY KEY CLUSTERED
(
[QuestionClassID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
--问题状态表
CREATE TABLE [dbo].[QuestionState](
[QuestionStateID] [int] IDENTITY(1,1) NOT NULL,
[QuestionStateName] [nvarchar](50) NULL,
CONSTRAINT [PK_QuestionState] PRIMARY KEY CLUSTERED
(
[QuestionStateID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
--问题记录表
CREATE TABLE [dbo].[Question](
[QuestionID] [int] IDENTITY(1,1) NOT NULL,
[Topic] [nvarchar](50) NULL,
[ClassID] [int] NULL,
[StateID] [int] NULL,
CONSTRAINT [PK_Question] PRIMARY KEY CLUSTERED
(
[QuestionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
--初始化状态数据
insert into QuestionState(QuestionStateName)
select '未处理' union all
select '已处理' union all
select '无效反馈'
--初始化类别数据
insert into QuestionClass(QuestionClassName)
select '产品问题' union all
select '销售问题' union all
select '服务问题' union all
select '其他问题'
--初始化问题数据
insert into Question(Topic,ClassID,St
相关文档:
SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,
SQL_TEXT
from V$SQLAREA
WHERE EXECUTIONS>0
AND BUFFER_GETS > 0
AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS ......
oracle中sql语句中select * from t_Test t where t.Id in(1,2,3......)/*数量不能大于1000个*/
解决方法 分割成多次in 然后再或上 如 select * from t_Test t where t.Id in(1,2,3......800) or t.Id in(801,802,803......1300)
在使用中最好能不使用其他条件来代替in
......
如果表中存放的数据是树形结构,当知道某一个节点的值时,同时想取得它所有子节点的数据。
表结构:
表中存放的是部门组织结构, BMN_CD部门,SSK_KAISO_LV是阶层,BMN_MKJ部门名称,JOI_KAISO_LV上 ......
SQL Server在msdb数据中维护了一系列表,用来存储执行所有备份和还原的细节信息。即使你正在使用第三方的备份应用程序,只要这个应用程序使用SQL Server的虚拟设备接口(Virtual Device Interface---VDI)来执行备份和还原执行,那么执行细节依然被存储在这一系列表中。
存储细节的表包括:
backupset
backupfile&n ......
想使用PL/SQL开发工具,但不想安装那个几百兆的oracle客户端,于是安装了oracle 10g inistant client,40多M吧。
安装后PL/SQL可以用了,但是查询出记录里面的中文却是乱码。折腾了好久才找出解决方法:
设置环境变量:NLS_LANG,值为Oracle数据库设置的字符集,在我的系统里面设置是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK ......