我们在SQL查询分析器里查询,比如
select * from T
这样是可以把T的所有记录都查出来,而且在分析器的数据表格里,会有个1,2,3,4行标我现在的问题是,我的查询是排名的,用ORDER BY,可以得到其排名顺序,现在想在记录集里,把排名出来的1,2,3,4等行标做为记录的一列,不知道该怎么处理还麻烦各位高手多多指教
select * from T
这样是可以把T的所有记录都查出来,而且在分析器的数据表格里,会有个1,2,3,4行标我现在的问题是,我的查询是排名的,用ORDER BY,可以得到其排名顺序,现在想在记录集里,把排名出来的1,2,3,4等行标做为记录的一列,不知道该怎么处理还麻烦各位高手多多指教
select id=identity(int,1,1),* into # from T order by ?
select * from #-->2005
select id=row_number() over (order by ?),* from T
张三 语文 73
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94想变成
姓名 语文 数学 物理
张三 73 83 93
李四 74 84 94create table #t
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)insert into #t(Name , Subject , Result) values('张三','语文','73')
insert into #t(Name , Subject , Result) values('张三','数学','83')
insert into #t(Name , Subject , Result) values('张三','物理','93')
insert into #t(Name , Subject , Result) values('李四','语文','74')
insert into #t(Name , Subject , Result) values('李四','数学','83')
insert into #t(Name , Subject , Result) values('李四','物理','93')declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then Result end) [' + Subject + ']'
from (select distinct Subject from #t) as a
set @sql = @sql + ' from #t group by name'
exec(@sql) drop table #t--结果
姓名 数学 物理 语文
---------- ----------- ----------- -----------
李四 83 93 74
张三 83 93 73
----------------------------------------------------
如果上述两表互相换一下:即姓名 语文 数学 物理
张三 73 83 93
李四 74 84 94想变成
Name Subject Result
张三 语文 73
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94create table #t
(
姓名 varchar(10) ,
语文 int ,
数学 int ,
物理 int
)insert into #t(姓名 , 语文 , 数学 , 物理) values('张三',73,83,93)
insert into #t(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94)select 姓名 as Name,'语文' as Subject,语文 as Result from #t union
select 姓名 as Name,'数学' as Subject,数学 as Result from #t union
select 姓名 as Name,'物理' as Subject,物理 as Result from #t
order by 姓名 desc drop table #t
--结果
Name Subject Result
---------- ------- -----------
张三 数学 83
张三 物理 93
张三 语文 73
李四 数学 84
李四 物理 94
李四 语文 74(所影响的行数为 6 行)
请看下我的代码select cEmployee.EmployeeName,cCard.PressWorkID,Sum(ConsumeMoney) as ConsumeMOney from
eConsumeData
left Join cCard on cCard.CardID=eConsumeData.CardID
left Join cEmployee on cEmployee.MaincardID=cCard.CardID
group By cEmployee.EmployeeName,cCard.PressWorkID
order By ConsumeMOney desc我是根据ConsumeMOney 来排序的,但是这样我的记录里只有cEmployee.EmployeeName,cCard.PressWorkID,Sum(ConsumeMoney)着三个字段,我想把顺序也作为一列,放在记录里
select * from # 我这样查出来的ID,并不是排序所得到的顺序呀
是乱的
eConsumeData
left Join cCard on cCard.CardID=eConsumeData.CardID
left Join cEmployee on cEmployee.MaincardID=cCard.CardID
group By cEmployee.EmployeeName,cCard.PressWorkID
order By 4 desc --用字段位置序号排序select * from #
并不等于 order by sum(ConsumeMOney) desc
我这样测试,结果得到的ID和我正常查询出来的ID不一样啊,也就是说,这个ID,并不是我排序出来的ID
(
select cEmployee.EmployeeName,cCard.PressWorkID,Sum(ConsumeMoney) as ConsumeMOney into # from
eConsumeData
left Join cCard on cCard.CardID=eConsumeData.CardID
left Join cEmployee on cEmployee.MaincardID=cCard.CardID
group By cEmployee.EmployeeName,cCard.PressWorkID
) t
order by ConsumeMOney
drop table #t
create table #t
(
姓名 varchar(10) ,
语文 int
)insert into #t(姓名 , 语文 ) values('张三',73)
insert into #t(姓名 , 语文 ) values('李四',99)
insert into #t(姓名 , 语文 ) values('王十',12)
insert into #t(姓名 , 语文 ) values('李三',34)
insert into #t(姓名 , 语文 ) values('赵六',56)
insert into #t(姓名 , 语文 ) values('目一',15)
insert into #t(姓名 , 语文 ) values('人人',100)
insert into #t(姓名 , 语文 ) values('我产',78)
drop table #2select id=identity(int,1,1),* into #2
from #t
order by 语文select *
from #2/*
id 姓名 语文
----------- ---------- -----------
1 王十 12
2 目一 15
3 李三 34
4 赵六 56
5 张三 73
6 我产 78
7 李四 99
8 人人 100 (所影响的行数为 8 行)
*/
Select * From #tableName
(
姓名 varchar(10) ,
语文 int
)insert into #t(姓名 , 语文 ) values('张三',73)
insert into #t(姓名 , 语文 ) values('李四',99)
insert into #t(姓名 , 语文 ) values('王十',12)
insert into #t(姓名 , 语文 ) values('李三',34)
insert into #t(姓名 , 语文 ) values('赵六',56)
insert into #t(姓名 , 语文 ) values('目一',15)
insert into #t(姓名 , 语文 ) values('人人',100)
insert into #t(姓名 , 语文 ) values('我产',78)
select (select count(1) from #t where 语文>=T.语文) as 名次,
T.*
from #t T
order by 语文 DESC