一个有关SQL语句的问题!(100分)

  • 主题发起人 主题发起人 牛牛
  • 开始时间 开始时间

牛牛

Unregistered / Unconfirmed
GUEST, unregistred user!
数据表结构如下:
cussabbname number
B 1
B 2
C 5
A 3
A 8
我用语句select cussabbname sum(number) from xxx group by cussabbname
但汇总出来后的结构是

A 11
B 3
c 5
怎样才能按我原来的顺序呢就是说
b 3
c 5
a 11
 
select a.cussabbname,sum(b.number)
from (select distinct cussabbname as cussabbname from xxx) a,xxx b
where a.cussabbname=b.cussabbname
group by a.cussabbname

上述语句没试过,未必可行)
 
添加一个临时字段,比如 No,其中放顺序号,然后
..... order by No
 
select distinct cussabbname, sum(number) number from xxx group by cussabbname
order by number
 
呵呵!我那个不行,还是楼上的合适)
 
简单,order by id就可以了。id是自动编号字段。
 
happyboyjia兄弟的语句不行吧?这只是巧合而已,如果数据多一点的话,就不行了。
 
同意楼上的说法。
实际上现在的数据库许多都是物理无关性的(如果有关的话麻烦就大了)。不知道怎么总是会
有这样的需求,这和数据库的原理是相冲突的。group by隐含了排序的过程。

to 牛牛:
看看能否调整你的需求,你说按照原来数据库中的顺序,但是如果原来数据库中是CBA
的顺序,那又如何?没有规律的!
如果硬要实现的话,需要在中间加入临时表,然后再通过对照得到想要的结果。简单的
功能就会变成一大堆代码了。
 
强烈同意楼上的说法,

//不明白你为什么要这么排序.
 
Select distinct cussabbname ,
(select sum(number) from xxx where as b where a.cussabbname =b.cussabbname )
from xxx as a;
我在SQL ANYWHERE 上试过了,没问题可以得到你要的结果!
给分吧 :)
 
這個問題有意思﹐我想這個問題是可以解決的﹐只是成本會很高﹐綜合而言﹐
如果成本過高就沒能必要這樣排序了。還有以上各位的方法應該說都不可靠的。
結合你的目的﹐用別的方法實現你的統計吧﹗ ^_^
 
to hbezwwl:
我代兄弟牛牛回答你吧。要这样排,是客户的要求!客户要按他输入的顺序排。
 
那是数据库设计时的问题啦!
可不能什么都让客户看到的!
你自己的关键字呢?如果要这样做的话,你得在表上增加程序所控制的关键字,而不让
客户看到。
 
Select tmp.Cussabbname,tmp.sum_number
from
(select cussabbname as Cussabbname,sum(number) as sum_number from xxx group by cussabbname) as tmp
order by tmp.sum_number

Sql Server 里已经通过
不知道你用的是什么
 
楼主的说法就是要在数据库中按Cussabbname字段的用户输入顺序排序,数据库能实现
按某一字段的排序,但是按字段的输入顺序排序好象不行吧:
如果非要实现的,应在数据表中加个id,然后在sql中:
select id ,Cussabbname,sum(number) from group by id ,Cussabbname;
然后再把id 设为不可见的:)
只是个思路:)
 
问题是如果加上了自动编 号的ID,就不能进行汇总了,看来上面的方法还是行不通的,
而且这个问题是不能用单纯的SQL语句解决了,只能关联到其它表去排序
如果是b 3
c 4
d 5
c 5
就很难排序了
谢谢大家的意见
 
select cussabbname ,sum(number) as number from xxx group by cussabbname
order by number
 
select cussabbname, sum(number) as No from xxx group by cussabbname
order by No 這樣就行啦
 
在MSSQL下可以用IDENTITY函数来达到效果
SELECT IDENTITY(INT,1,1) AS ID,CUSSABBNAME INTO #TEMP FROM TABLE1
生成一临时表TEMP如下
ID CUSSABBNAME
1 B
2 B
3 C
4 A
5 A
再利用临时表的排序号来得到最终结果
SELECT DISTINCT CUSSABBNAME,
(SELECT SUM(NUMBER) FROM TABLE1 WHERE CUSSABBNAME=AAA.CUSSABBNAME),
(SELECT MIN(ID) FROM #TEMP WHERE CUSSABBNAME=AAA.CUSSABBNAME) AS ID
FROM TABLE1 AAA
ORDER BY ID

结果
B 3 1
C 5 3
A 11 4
 
接受答案了.
 
后退
顶部