猿问

sql 统计查询 分页的问题

如表A
id name bid cid  time

1   jerry   1     1   2015-11-09
2   tom    1     1   2015-11-08
3   lucy    2     1   2015-11-07
4   tom    1     1   2015-11-08
5   lucy    3     1   2015-11-07

表B
bid   name
1     状态1
2     状态2
3     状态3

表C
cid  name
1     公司1


结果
公司,         时间,           状态1,    状态2,    状态3
公司1     2015-11-07         0                1               1
公司1     2015-11-08         2                0               0
公司1     2015-11-09         1                0               0

请问SQL语句该怎么写?需要进行分页,谢谢!

翻翻过去那场雪
浏览 458回答 5
5回答

大话西游666

-- 给一段SQLServer 2005+ 下的代码-- 设置每页条数和取第几页declare @pagesize int, @pagenum intset @pagesize = 20set @pagenum = 1select C.name as [公司], t.time, t.[状态1], t.[状态2], t.[状态3]from (    select     cid,     time,    sum(case bid when 1 then 1 else 0 end) as [状态1],    sum(case bid when 2 then 1 else 0 end) as [状态2],    sum(case bid when 3 then 1 else 0 end) as [状态3],    row_number() over (order by cid, time) as [rank]    from A group by cid, time)t inner join C on t.rank between (@pagenum-1)*@pagesize +1  and @pagenum*@pagesize and t.cid = C.cid

慕标琳琳

先写个视图,然后对视图进行分页就行了。

翻过高山走不出你

int strPage=(pageIndex-1)*pageSize; int endPage=pageIndex*pageSize; select top 20 * from  ( select row_number() over(order by a.排序的列 desc)rownum,* from 表名 a )temp where temp.rownum>=starPage and temp<=endPage 这个是MVC的三层架构,传入pageIndex和pageSize

慕的地10843

get it

qq_花开花谢_0

结果中列的个数应该不是固定的 真的可以写成视图么? 单单现在这样的行转列,就不是简单一个sql可以实现的吧。。 写了一个sql,但只是【状态1,状态2,状态3】部分实际是需要拼接sql才可行的。。 SELECT * FROM (SELECT #C.name AS 公司,#A.time AS 时间,#B.NAME FROM #A,#B,#Cwhere #A.bid = #B.bid AND #A.cid=#C.cid)XPIVOT(COUNT(name) FOR name IN (状态1,状态2,状态3))a 因为涉及到拼接sql和分页,我推荐用存储过程来做。 不过也许是在下才疏学浅,没能想到好的办法。期待大牛的回答。。
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答