高手请进,GROUP BY 和distinct

来源:百度知道 编辑:UC知道 时间:2024/09/23 07:11:05
ASP里边:
比如下面这个表:

id name L1 L2
1 a 1 1
2 b 2 1
3 c 1 2
4 d 2 2

我现在想实现这样一种效果:
先按照L1分组 分完组后

L1=1:
id name L1 L2
1 a 1 1
3 c 1 2

L1=2:
id name L1 L2
1 b 2 1
3 d 2 2

再按照L2不同值分组 分完组后

L1=1:
L2=1
L2=2
L1=2:
L2=1
L2=2

的效果。

问题:
1、用distinc可以根据取出这列的不同值,但是select distinct(L1) from 表 只能显示L1的不同值,是不能把整行的信息都显示出来的。有没有别的办法?
2、另外请问,group by 分成的不同的group,怎样在ASP中逐一列出所有的group?它的变量名是怎么定义的?也就是说怎么在后面的循环中引用?

1、对于你的第一个问题:
select distinct 字段1,字段2,字段3,字段4... from 表名;
这样查出的就是不重复的(字段1,字段2,字段3,字段4...)
2、对于你的第二个问题:
select L1,L2 from 表 group by L1,L2;
这样实现的效果就是 先按L1分组再按L2分组了,你把这些数据取到list中,循环读取list内容就好了。

---
以上,希望对你有所帮助。

数据库可以这样

use Tempdb
go
--> -->

declare @T table([id] int,[name] nvarchar(1),[L1] int,[L2] int)
Insert @T
select 1,N'a',1,1 union all
select 2,N'b',2,1 union all
select 3,N'c',1,2 union all
select 4,N'd',2,2

Select
[id1]=case when [id]=(select min([id]) from @T where [L1]=t.[L1]) then rtrim([id]) else '' end,
[name1]=case when [id]=(select min([id]) from @T where [L1]=t.[L1]) then [name] else ''end,
[L1],[L2]
from @T t
order by [L1],[id]

(4 个资料列受到影响)
id1 name1 L1 L2
------------ ----- ----------- -----------
1 a 1 1