不同的水果品种经过SUM求和以后占总量的百分比SQL语句怎么写,谢谢大家!

表结构
CREATE TABLE [dbo].[apple](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[number] [int] NULL
) ON [PRIMARY]

apple 表内容
1 苹果 4
2 苹果 4
3 鸭梨 16
4 西瓜 3
5 习惯 5

查询之后结果按照品种的数量排序,并且有百分比

鸭梨 16 50%
西瓜 8 25%
苹果 8 25%

请问这条语句应该怎么写,谢谢大家!

[397 byte] By [csharpcn-爱搏] at [2008-1-9]
# 1
表结构
CREATE TABLE [dbo].[apple](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[number] [int] NULL
) ON [PRIMARY]

apple 表内容
1 苹果 4
2 苹果 4
3 鸭梨 16
4 西瓜 3
5 西瓜 5

查询之后结果按照品种的数量排序,并且有百分比

鸭梨 16 50%
西瓜 8 25%
苹果 8 25%

请问这条语句应该怎么写,谢谢大家!
csharpcn-爱搏 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 2
select name ,num ,convert(varchar(10),cast(num/(select sum(number) from apple)*100 as decimal(9,2)))+'%' as bf
from (select name ,sum(number) as num from apple group by name ) a
xiaoku-野蛮人-v at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 3
CREATE TABLE [dbo].[apple](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[number] [int] NULL
) ON [PRIMARY]

insert apple select '苹果', 4
union all select '苹果', 4
union all select '鸭梨', 16
union all select '西瓜', 3
union all select '西瓜', 5

select name,sum(number) 数量,cast(cast(sum(number)*1.0/(select sum(number) from apple)*100 as dec(4,2)) as varchar(5))+'%' 百分比 from apple group by [name] order by 百分比 desc

drop table apple

name 数量 百分比
-------------------------------------------------- ----------- ------
鸭梨 16 50.00%
苹果 8 25.00%
西瓜 8 25.00%

(所影响的行数为 3 行)
akuzou-启航 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 4
SELECT Name, SUM([number]),
STR(SUM([number])/(SELECT SUM([number])+0.00 FROM apple)*100,4,2)+'%'
FROM apple
GROUP BY name
bugchen888-臭虫 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 5
xiaoku(野蛮人(^v^)) ( ) 你好快啊!
akuzou-启航 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 6
select name ,num ,convert(varchar(10),cast(num/(select sum(number) from apple)*100 as decimal(9,2)))+'%' as bf
from (select name ,sum(number) as num from apple group by name ) a
order by num

---之前的少了个排序的
xiaoku-野蛮人-v at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 7
SELECT Name, SUM([number]),
STR(SUM([number])/(SELECT SUM([number])+0.00 FROM apple)*100,4,2)+'%'
FROM apple
GROUP BY name
ORDER BY SUM([number]) DESC

---额也少了一个排序
bugchen888-臭虫 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 8
呵呵。。。没SQL ,只好随便写写了,当然快了
xiaoku-野蛮人-v at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 9
谢谢大家马上结帖
csharpcn-爱搏 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...
# 10
select
cast(datediff(s,getdate(),'2006-12-31 18:00:00.000')/3600 as varchar)+'小时'
+cast(datediff(mi,getdate(),'2006-12-31 18:00:00.000')%60 as varchar)+'分'
+cast(datediff(s,getdate(),'2006-12-31 18:00:00.000')%60 as varchar)+'秒' 距下班时间还剩

距下班时间还剩
---------------------------------]
1小时11分15秒

(所影响的行数为 1 行)

akuzou-启航 at 2007-10-18 > top of Msdn China Tech,MS-SQL Server,基础类...