首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

多张表 依照信息出现的数量进行排序

2013-10-12 
多张表按照信息出现的数量进行排序RT:多张表按照信息出现的数量进行排序表1 User 会员表IDUserName 表2 Ne

多张表 按照信息出现的数量进行排序
RT:多张表  按照信息出现的数量进行排序

表1 User 会员表
ID  UserName 

表2 News 新闻表
ID  NewsName  UserID

表3 Pics 图片表
ID  PicsName  UserID

User表和ID 和其它两张表的USERID关联,现在需要按照会员发布的新闻 图片数量的总和进行排序


[解决办法]
select username,count(b.id) nid,count(c.id)pid
from user a inner join news b on a.id=b.userid
inner join pics c on a.id=c.userid
group by username
order by count(b.id)+count(c.id) 
[解决办法]
ISNULL(c.Pics_count)--->ISNULL(c.Pics_count,0)

select *
from 
(
select a.*,ISNULL(b.News_count,0)+ISNULL(c.Pics_count,0) as total
from [User] a
left join (select UserID,COUNT(*) as News_count from News group by UserID)b on a.ID=b.UserID
left join (select UserID,COUNT(*) as Pics_count from Pics group by UserID)c on a.ID=c.UserID
)t
order by total desc


[解决办法]

;WITH A AS
(
SELECT COUNT(1) AS cnt,UserID
FROM
(
SELECT UserID
FROM News
UNION ALL
SELECT UserID
FROM Pics
) T
GROUP BY UserID
)

SELECT U.*,ISNULL(A.cnt,0) AS [Sum]
FROM [User] U LEFT JOIN A ON U.ID=A.UserID
ORDER BY [Sum] DESC

[解决办法]
select * from User a
order by (select count(*) from News where userId=a.id)+
         (select count(*) from pics where userId=a.id) desc
[解决办法]
低版本的access可能不支持left join
这是网上找的
Access不支持两个以上的 left join 在网上查一下,有哥们说每个 left join 要加 () 
   在修改之前(不能执行,ms sql 里执行以通过)
       select table1.fildes1, table1.fildes2,table2.fildes1, table2.fildes2,table3.fildes1, table3.fildes2  from
table1 left join table2 on table1.fildes1= table2.fildes1 left join table3 on  table1.fildes1= table3.fildes1
 修改之后(执行通过)  每个 left join 要加 ()
       select table1.fildes1, table1.fildes2,table2.fildes1, table2.fildes2,table3.fildes1, table3.fildes2  from
((table1 left join table2 on table1.fildes1= table2.fildes1) left join table3 on  table1.fildes1= table3.fildes1
[解决办法]
引用:
Quote: 引用:

ISNULL(c.Pics_count)--->ISNULL(c.Pics_count,0)

select *
from 
(
select a.*,ISNULL(b.News_count,0)+ISNULL(c.Pics_count,0) as total
from [User] a
left join (select UserID,COUNT(*) as News_count from News group by UserID)b on a.ID=b.UserID
left join (select UserID,COUNT(*) as Pics_count from Pics group by UserID)c on a.ID=c.UserID
)t
order by total desc


正解 在MSSQL下能正常查询  可以在ACCESS里面提示语法错误,哪位大神知道是什么原因?

求解  语句如下


select * 
from 

select a.ClassName,ISNULL(b.News_count,0)+ISNULL(c.Pics_count,0)+ISNULL(d.Download_count,0) as total 
from [HK_Department] a 
left join (select Department,COUNT(*) as News_count from HK_News group by Department) as b on a.ID=b.Department 
left join (select Department,COUNT(*) as Pics_count from HK_Pics group by Department) as c on a.ID=c.Department 
left join (select Department,COUNT(*) as Download_count from HK_Download group by Department) as d on a.ID=d.Department )t 
order by total desc


isnull在access和SQL SERVER中的意义不同,access中的isnull只是判断是否为空,改为:
select *
from 
(
select a.*,iif(ISNULL(b.News_count),0,b.News_count)+iif(ISNULL(c.Pics_count),0,c.Pics_count) as total


from [User] a
left join (select UserID,COUNT(*) as News_count from News group by UserID)b on a.ID=b.UserID
left join (select UserID,COUNT(*) as Pics_count from Pics group by UserID)c on a.ID=c.UserID
)t
order by total desc

热点排行