这个题如果Bok_name为null的列按照 Book_TotalCustomer 、Book_TotalNum 排序就说的更好一些.没有就用临时表: select id=identity(int,1,1),* int #tmp from test
select Book_Name=(case when id in (select min(id) from #tmp group by Book_Name)
then Book_Name else null end)
,Book_Operator ,Book_TotalCustomer, Book_TotalNum
from #tmp
drop table #tmp
select Book_Name=(case when id in (select min(id) from #tmp group by Book_Name)
then Book_Name else null end)
,Book_Operator ,Book_TotalCustomer, Book_TotalNum
from #tmp
drop table #tmp
select Book_Name=(case when id in (select min(id) from #tmp group by Book_Name)
then Book_Name else null end)
,Book_Operator ,Book_TotalCustomer, Book_TotalNum
from #tmp
drop table #tmp
--------------------
医学心理学 小张 4 23
NULL 小李 24 35
NULL 小王 2 34
工程力学 小张 23 34
NULL 小李 5 17
NULL 小王 7 20
Book_Name Book_Operator Book_Customer Book_Num
医学心理学 小张 广东 6
工程力学 小李 湖南 4
医学心理学 小李 广东 8
工程力学 小张 陕西 3
医学心理学 小李 陕西 4
医学心理学 小张 广东 8 (和第一条记录除了发货数都相同
工程力学 小王 陕西 3
医学心理学 小刘 广东 8 结果是:
Book_Name Book_Operator Book_TotalCustomer Book_TotalNum
医学心理学 小张 1 14
NULL 小李 2 12
NULL 小刘 1 8
工程力学 小张 1 3
NULL 小李 1 4
NULL 小王 1 3
注意这里有两点:
1 医学心理学--小张 只发给过一个客户,发了两次,Book_TotalCustomer=1,Book_TotalNum=6+8
2 医学心理学,工程力学里的小张是同一个人,只是因为分级查询而到了结果的不同记录里
,Book_TotalCustomer=count(distinct Book_Customer)
,Book_TotalNum=sum(Book_Num)
from tb
group by Book_Name,Book_Operator
order by Book_Name,Book_Operator
create table tb(Book_Name nvarchar(10),Book_Operator nvarchar(10),Book_Customer nvarchar(10),Book_Num int)
insert tb select N'医学心理学',N'小张',N'广东',6
union all select N'工程力学' ,N'小李',N'湖南',4
union all select N'医学心理学',N'小李',N'广东',8
union all select N'工程力学' ,N'小张',N'陕西',3
union all select N'医学心理学',N'小李',N'陕西',4
union all select N'医学心理学',N'小张',N'广东',8
union all select N'工程力学' ,N'小王',N'陕西',3
union all select N'医学心理学',N'小刘',N'广东',8
go--查询
select Book_Name,Book_Operator
,Book_TotalCustomer=count(distinct Book_Customer)
,Book_TotalNum=sum(Book_Num)
from tb
group by Book_Name,Book_Operator
order by Book_Name,Book_Operator
go--删除测试
drop table tb/*--测试结果Book_Name Book_Operator Book_TotalCustomer Book_TotalNum
---------- ------------- ------------------ -------------
工程力学 小李 1 4
工程力学 小王 1 3
工程力学 小张 1 3
医学心理学 小李 2 12
医学心理学 小刘 1 8
医学心理学 小张 1 14(所影响的行数为 6 行)
--*/
,Book_TotalCustomer=count(distinct a.Book_Customer)
,Book_TotalNum=sum(a.Book_Num)
from tb a left join(
select Book_Name,Book_Operator=min(Book_Operator)
from tb group by Book_Name
)b on a.Book_Name=b.Book_Name and a.Book_Operator=b.Book_Operator
group by a.Book_Name,b.Book_Name,a.Book_Operator
order by a.Book_Name,a.Book_Operator
go
create table tb(Book_Name nvarchar(10),Book_Operator nvarchar(10),Book_Customer nvarchar(10),Book_Num int)
insert tb select N'医学心理学',N'小张',N'广东',6
union all select N'工程力学' ,N'小李',N'湖南',4
union all select N'医学心理学',N'小李',N'广东',8
union all select N'工程力学' ,N'小张',N'陕西',3
union all select N'医学心理学',N'小李',N'陕西',4
union all select N'医学心理学',N'小张',N'广东',8
union all select N'工程力学' ,N'小王',N'陕西',3
union all select N'医学心理学',N'小刘',N'广东',8
go--查询
select b.Book_Name,a.Book_Operator
,Book_TotalCustomer=count(distinct a.Book_Customer)
,Book_TotalNum=sum(a.Book_Num)
from tb a left join(
select Book_Name,Book_Operator=min(Book_Operator)
from tb group by Book_Name
)b on a.Book_Name=b.Book_Name and a.Book_Operator=b.Book_Operator
group by a.Book_Name,b.Book_Name,a.Book_Operator
order by a.Book_Name,a.Book_Operator
go--删除测试
drop table tb/*--测试结果Book_Name Book_Operator Book_TotalCustomer Book_TotalNum
---------- ------------- ------------------ -------------
工程力学 小李 1 4
NULL 小王 1 3
NULL 小张 1 3
医学心理学 小李 2 12
NULL 小刘 1 8
NULL 小张 1 14(所影响的行数为 6 行)
--*/
也谢谢其他几位朋友,马上结帖。