2011-05-10 50 views
0

我正在寻找一种方法,可以使用SQL以非常特定的顺序从Access数据库返回数据。我想查找最低频率,按频率顺序列出所有系统,从最低频率的系统开始,然后对下一个最高频率执行相同的操作,依此类推。分组数据的SQL排序

这就是我希望输出的方式。 (换行只是为了易于观察的排序顺序的,我会在后面加上那些在程序代码。)

System Freq 
------ ------ 
FM  100 
FM  120 
FM  150 

AM  110 
AM  150 
AM  170 

CW  160 
CW  180 
CW  200 

是像这可能与SQL?任何帮助将不胜感激。谢谢。

+2

来源是什么?您提供最终输出的示例还是源代码? – YetAnotherUser 2011-05-10 19:19:42

+0

Freq是从一个集合函数计算出来的,例如'SUM'或'AVG'是不是? – 2011-05-10 19:25:53

+0

这是我希望这种工作。我没有在这个例子中显示它,但正常的ORDER BY不起作用,因为系统列不是按字母顺序排列的,但我希望系统名称保持在一起,并且按照频率排序。 – Dan 2011-05-10 19:32:44

回答

3

这是你想要的吗?

Select System, Freq 
from YourTableName 
Order By System, Freq 

或者,如果我重新阅读“你的问题正确或许这就是你想要的(道歉了很背的包络码)

Select YT1.[System], YT1.[Freq] 
From YourTable YT1 
     Inner Join (
      Select [System], Min(Freq) MinFreq 
      From YourTable YT2 
      Group By [System] 
     ) YT3 on YT1.[System] = YT3.[System] 
Order By YT3.[MinFreq], YT1.[System], YT1.Freq 
+0

看起来它会做我想做的事情。但是当我在数据库上试试这个时,我得到错误YT1。[System]没有默认值。我错过了什么吗? – Dan 2011-05-10 21:45:48

+1

@Dan如果你可以发布你的[YourTable]结构,回答这个问题会更简单。 YT1。[系统]是否有空值,或者您是否将此作为子查询插入到另一个表中? – YetAnotherUser 2011-05-10 21:50:22

+0

原来我应该引用他的索引而不是另一个加入的列。它现在很好用。谢谢! – Dan 2011-05-11 14:23:07

-1

没有你的源数据的更清晰的画面,这看起来像它只是一个简单的命令由多个列:

SELECT [System], [Freq] 
FROM [TableName] 
ORDER BY [Freq], [System] 
+0

而反对票是因为...? – Tom 2011-05-11 14:03:02

0

一般答案是肯定的,举一个别名,双方系统和频率的频率计算列和顺序:见FO的例子r多行排序here