SQL中的多字段分组查询问题

时间:2021-12-10 15:07:17

 在sql2000中,如何实现2个或以上字段的分组查询呀,比如,有字段A和B、C等,希望A和B一起分组进行查询得到结果,个人觉得sql在这方面的支持度不够,请各位高手帮帮忙!!!

23 个解决方案

#1


slect ....from tb group by A,B,C  按A,B,C分组

#2


回复人: j9988(j9988) 
一.A.不用事务,关用SELECT 语句.是否可以分布式查询?
   B.LINKSERVER 在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)
   C.DBCC TRACEON (3604, 7300)--用跟踪看更详细错误信息.
  
   D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息.
http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe
二.两台机的MSDTC是否都打开了.
三.MSDTC设置是否正确.
1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
2.转至"组件服务管理工具"。
3.浏览至"启动管理工具"。
4.选择"组件服务"。
 a.展开"组件服务"树,然后展开"我的电脑"。
 b.右键单击"我的电脑",然后选择"属性"。
 C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
网络管理
网络事务
    XA 事务
 e.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。
5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。
  所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
6.单击"确定"关闭"我的电脑"属性窗口。
四.
MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
telnet IP 135
如果是关闭的打开它.
五.
有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接.
使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.
七.检查你的两台服务器是否在同一个域中.
如果不在同一个域中,是否建立可信任联接.
八.如果是WIN2000,升级到SP4
九.升级MDAC到2.6以上,最好是2.8.
十.要安装SQL的最新补丁: sp3a
'全部补丁的位置
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766
'应该安装的补丁sql 2000 sp3
http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe

#3


不好意思,贴错了

#4



  是可以在group by后面加上多个字段,但是有些字段并不希望在group by后面出现,而希望出现在select中,不知怎么弄呀

#5


不会,帮你up

#6


那就用嵌套子查询

#7


给你一个实例,要不都不知道具体如何告诉你~

#8



 那就贴出来看看呀,谢谢.

#9


贴出来。

#10


Select  A , B , ( Select t2.C From Table t2 Where t2.A = t1.A ) 
From Table t1 
Where ...
Group by A , B

假设A唯一。

不知上面的可以否? ^_^

#11



 我的问题还没有解决呀,我希望group by后面出现的字段之外的字段应该出现在select选择字段中,怎么做呢?谢谢大家.

#12


你能够举个例子吗

给出源表,再列出你想要的结果

#13



 就是这样的:
  select C from log1 order by D group by A,B 
 但是这样的SQL语句在查询分析器中是无法执行的,不知有没有别的方法能达到这个要求.

#14


比如你的表内容是这样的:

  A         B        C
  1         2        mm
  2         3        nn
  1         2        hh
  
通过group by A,B后,你想得到什么样的结果?

#15



 首先要谢谢你的关注,我的问题还是说下面的SQL语句不能执行:
 select C from log1 order by D group by A,B 
 我只希望按照A,B分组后得到C字段的内容就行了

#16


这样要用子查询啦!最好把你要数据和表贴上来

#17


//table log1,部分字段如下:
 
 A               B                                                    C             ...
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;   1
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;   3 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0;   5 
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)      11
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)      16         
...              ...                                                  ...           ...

#18


上边的顺序有些乱,其实是这样的:
//table log1,部分字段如下:
 
A                B                                                   C    ...
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;  1    
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;  3 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0;  5 
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)     11
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)     16         
...              ...                                                  ... ...

#19



 上面16是最后一行C字段的内容.

#20


楼主大人,我当然清楚你想对A,b使用group by,但又想显示C的内容。
但你能不能告诉大家一下,根据你的表结构和数据,你想要得到什么样的结果呢。
因为你又想聚合,又不愿得到聚合后的结果,别人怎么知道你想怎么样
你只需要把你想看到的结果写出来,大家不就都清楚了吗?

#21


估计是没有说清楚,其实在select子句中加入A、B必要的,但是不能加入group by 之外的字段,这个问题可能要做2次SQL查询,或者能不能换成order by A,B,C的形式,因为我最终要的是在每个A/B组中C的数据。
 第一次SQL: select A,B from log1 group by A,B
 第二次SQL: select C from log1 where A='xx' and B='yy'
 不知说清楚没?  

#22


还是没明白!
其实你只需说出原始数据和期望的结果就行。例如你的例子:
A                B                                                  C   
======================================================================= 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2  1    
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2  3 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0  5 
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)    11
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)    16   

然后写出期望的结果,假设如下:
C
====================
1
5
11
16

#23



 这个问题还得分两步走,因为我发现行不通,散分呀  

#1


slect ....from tb group by A,B,C  按A,B,C分组

#2


回复人: j9988(j9988) 
一.A.不用事务,关用SELECT 语句.是否可以分布式查询?
   B.LINKSERVER 在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)
   C.DBCC TRACEON (3604, 7300)--用跟踪看更详细错误信息.
  
   D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息.
http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe
二.两台机的MSDTC是否都打开了.
三.MSDTC设置是否正确.
1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
2.转至"组件服务管理工具"。
3.浏览至"启动管理工具"。
4.选择"组件服务"。
 a.展开"组件服务"树,然后展开"我的电脑"。
 b.右键单击"我的电脑",然后选择"属性"。
 C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
网络管理
网络事务
    XA 事务
 e.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。
5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。
  所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
6.单击"确定"关闭"我的电脑"属性窗口。
四.
MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
telnet IP 135
如果是关闭的打开它.
五.
有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接.
使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.
七.检查你的两台服务器是否在同一个域中.
如果不在同一个域中,是否建立可信任联接.
八.如果是WIN2000,升级到SP4
九.升级MDAC到2.6以上,最好是2.8.
十.要安装SQL的最新补丁: sp3a
'全部补丁的位置
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766
'应该安装的补丁sql 2000 sp3
http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe

#3


不好意思,贴错了

#4



  是可以在group by后面加上多个字段,但是有些字段并不希望在group by后面出现,而希望出现在select中,不知怎么弄呀

#5


不会,帮你up

#6


那就用嵌套子查询

#7


给你一个实例,要不都不知道具体如何告诉你~

#8



 那就贴出来看看呀,谢谢.

#9


贴出来。

#10


Select  A , B , ( Select t2.C From Table t2 Where t2.A = t1.A ) 
From Table t1 
Where ...
Group by A , B

假设A唯一。

不知上面的可以否? ^_^

#11



 我的问题还没有解决呀,我希望group by后面出现的字段之外的字段应该出现在select选择字段中,怎么做呢?谢谢大家.

#12


你能够举个例子吗

给出源表,再列出你想要的结果

#13



 就是这样的:
  select C from log1 order by D group by A,B 
 但是这样的SQL语句在查询分析器中是无法执行的,不知有没有别的方法能达到这个要求.

#14


比如你的表内容是这样的:

  A         B        C
  1         2        mm
  2         3        nn
  1         2        hh
  
通过group by A,B后,你想得到什么样的结果?

#15



 首先要谢谢你的关注,我的问题还是说下面的SQL语句不能执行:
 select C from log1 order by D group by A,B 
 我只希望按照A,B分组后得到C字段的内容就行了

#16


这样要用子查询啦!最好把你要数据和表贴上来

#17


//table log1,部分字段如下:
 
 A               B                                                    C             ...
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;   1
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;   3 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0;   5 
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)      11
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)      16         
...              ...                                                  ...           ...

#18


上边的顺序有些乱,其实是这样的:
//table log1,部分字段如下:
 
A                B                                                   C    ...
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;  1    
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;  3 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0;  5 
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)     11
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)     16         
...              ...                                                  ... ...

#19



 上面16是最后一行C字段的内容.

#20


楼主大人,我当然清楚你想对A,b使用group by,但又想显示C的内容。
但你能不能告诉大家一下,根据你的表结构和数据,你想要得到什么样的结果呢。
因为你又想聚合,又不愿得到聚合后的结果,别人怎么知道你想怎么样
你只需要把你想看到的结果写出来,大家不就都清楚了吗?

#21


估计是没有说清楚,其实在select子句中加入A、B必要的,但是不能加入group by 之外的字段,这个问题可能要做2次SQL查询,或者能不能换成order by A,B,C的形式,因为我最终要的是在每个A/B组中C的数据。
 第一次SQL: select A,B from log1 group by A,B
 第二次SQL: select C from log1 where A='xx' and B='yy'
 不知说清楚没?  

#22


还是没明白!
其实你只需说出原始数据和期望的结果就行。例如你的例子:
A                B                                                  C   
======================================================================= 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2  1    
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2  3 
192.168.28.254   Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0  5 
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)    11
219.146.244.50   Mozilla/4.0+(compatible;+MSIE+5.00;+Windows+98)    16   

然后写出期望的结果,假设如下:
C
====================
1
5
11
16

#23



 这个问题还得分两步走,因为我发现行不通,散分呀