易截截图软件、单文件、免安装、纯绿色、仅160KB

Sql Sever记录的行列转换

已知一个表的结构为:
姓名 科目 成绩
张三 语文 20
张三 数学 30
张三 英语 50
李四 语文 70
李四 数学 60
李四 英语 90
怎样通过select语句把他变成以下结构:
姓名 语文 数学 英语
张三 20 30 50
李四 70 60 90
答:
CREATE TABLE [dbo].[Stu] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Class] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[score] [int] NOT NULL
) ON [PRIMARY]
GO
select * from Stu
insert into Stu values('马里','语文',80)
insert into Stu values('马里','数学',96)
insert into Stu values('付帅','语文',85)
insert into Stu values('付帅','数学',85)
insert into Stu values('唐子意','语文',30)
insert into Stu values('唐子意','数学',50)
insert into Stu values('王海辰','英语',35)
declare @sql nvarchar(4000)
set @sql=''
select @sql = @sql + ',sum(case class when '''+ class + ''' then score else 0 end) as ' +class from stu group by class
set @sql = 'select name '+@sql+' from stu group by name'
print @sql
exec(@sql)
(
可以试试这个:
declare @sql nvarchar(4000)
set @sql=''
select @sql = @sql + class from stu
print @sql
)
另一种:
--创建存储过程
create proc dbo.usp_data
as
--定义一个游标
DECLARE cur_class CURSOR
 FOR
--从stu表中获得所有的科目并且排序
SELECT distinct class from stu ORDER BY class
--打开游标
OPEN cur_class
--定义游标循环的行数
DECLARE @cursor_row INT
--定义循环过程中需要的获得的科目名称,用此变量保存
DECLARE @class nvarchar(100)
--设置游标的行数
SET @cursor_row = @@CURSOR_ROWS
--定义循环中需要拼接的字符串
declare @sql nvarchar(4000)
declare @insert_sql nvarchar(4000)
declare @case_sql nvarchar(4000)
declare @sum_sql nvarchar(4000)
--创建临时表的语句固定部分
set @sql = 'create table #temp (姓名 nvarchar(100),'
set @insert_sql = 'insert into #temp(姓名,'
set @case_sql = ''
set @sum_sql = ''
--print @cursor_row
--按照游标循环,即按科目循环
WHILE(@cursor_row > 0)
BEGIN
 SET @cursor_row = @cursor_row - 1
 FETC


相关文档:

sql 日期转换

Select  
CONVERT(varchar, getdate(), 1),--mm/dd/yy  
CONVERT(varchar, getdate(), 2),--yy.mm.dd  
CONVERT(varchar, getdate(), 3),--dd/mm/yy  
CONVERT(varchar, getdate(), 4),--dd.mm.yy  
CONVERT(varchar, getdate(), 5),--dd-mm-yy  
CONVERT(varchar, getdate(), 1 ......

SQL查询每所学校语文成绩最高的学生信息

数据库 有两张表
表1: student
表2:chinese
现在要分别列出 每所学校 语文成绩最高的 学生信息
SQL :
SELECT *
from student
LEFT JOIN chinese ON student.no = chinese.no
WHERE chinese.chengji
IN (
SELECT max( chinese.chengji )
from student
LEFT JOIN chinese ON student.no = chinese.no
GROU ......

orale sql相关学习

to_date和to_char是oracle里里面的内置函数而不是标准的sql语法中的函数,用法举例:
1.to_char,返回结果可显示为各种形式
 select to_char(sysdate,'yyyy/mm/dd') ,sysdate from dual;
结果:  2010/05/26               &nbs ......

SQL中Case的使用方法(下篇)

接上篇
四,根据条件有选择的UPDATE。
例,有如下更新条件
工资5000以上的职员,工资减少10%
工资在2000到4600之间的职员,工资增加15%
很容易考虑的是选择执行两次UPDATE语句,如下所示
--条件1
UPDATE Personnel
SET salary = salary * 0.9
WHERE salary >= 5000;
--条件2
UPDATE Personnel
SET sala ......

关于sql连接语句中的Integrated Security=SSPI

关于sql连接语句中的Integrated Security=SSPI
解决方法:
即:Security Support Provider Interface
设置Integrated Security为 True 的时候,连接语句前面的 UserID, PW 是不起作用的,即采用windows身份验证模式。
只有设置为 False 或省略该项的时候,才按照 UserID, PW 来连接。
Integrated Security 可以设置为: ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号