select * from (select ROW_NUMBER() over(order by b.YuLeCSMC,ylfwcsid,CiShu,a.DaKaSJ desc) as row, T.* from ( select b.YuLeCSMC,ylfwcsid,count(id) as CiShu,a.DaKaSJ from Info_DaKaJL a left join Info_YuLeCS b on YLFWCSID=b.YLCSID where b.ZhiAnGLJGDM like '%46%' group by b.YuLeCSMC,ylfwcsid,a.DaKaSJ union all select b.YuLeCSMC,ylfwcsid,count(id) as CiShu,\'合计\' from Info_DaKaJL a inner join Info_YuLeCS b on YLFWCSID=b.YLCSID where b.ZhiAnGLJGDM like '%46%' group by b.YuLeCSMC,ylfwcsid order by ylfwcsid,a.DaKaSJ ) T where 1=1 ) TT where TT.row between 1 and 10
这是sql,执行的时候会报错
消息 1033,级别 15,状态 1,第 8 行
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
错误是这样,但是我不知道怎么去解决了,在线等,谢谢
百度之后加
top 100 percent
但是我不知道加在哪里,至少我加了之后还是这样,这里其实主要是 union all和sql语句的冲突,但是小弟解决不了这个冲突,请大神们不吝赐教
饿 这样可以:
1 SELECT * 2 FROM ( 3 SELECT ROW_NUMBER() OVER(ORDER BY T.YuLeCSMC, T.ylfwcsid, T.CiShu, T.DaKaSJ DESC) AS 4 row, 5 T.* 6 FROM ( 7 SELECT TOP 100 PERCENT b.YuLeCSMC, 8 ylfwcsid, 9 COUNT(id) AS CiShu, 10 a.DaKaSJ 11 FROM Info_DaKaJL a 12 LEFT JOIN Info_YuLeCS b 13 ON YLFWCSID = b.YLCSID 14 WHERE b.ZhiAnGLJGDM LIKE '%46%' 15 GROUP BY 16 b.YuLeCSMC, 17 ylfwcsid, 18 a.DaKaSJ 19 UNION ALL SELECT TOP 100 PERCENT b.YuLeCSMC, 20 ylfwcsid, 21 COUNT(id) AS CiShu, 22 \'合计\' 23 FROM Info_DaKaJL a 24 INNER JOIN Info_YuLeCS b 25 ON YLFWCSID = b.YLCSID 26 WHERE b.ZhiAnGLJGDM LIKE '%46%' 27 GROUP BY 28 b.YuLeCSMC, 29 ylfwcsid 30 ORDER BY 31 ylfwcsid, 32 a.DaKaSJ 33 ) T 34 WHERE 1 = 1 35 ) TT 36 WHERE TT.row BETWEEN 1 AND 10
有一点点小问题,不过小弟已经纠正,谢谢,还是经验太少,找到解决办法,但是加不到地方。。。
@_Vegetables: 解决问题就好,经验都是如此积累的。
ROW_NUMBER() 可以这样用?
我用ROW_NUMBER()的时候都要用到with
这样是绝对没有问题的,用with结果不是一样么,这里查询还是要count,就要用group by,但是一旦group by,就又回到了现在的现在的问题,order by的问题,好像是这么个意思
select * from (select ROW_NUMBER() over(order by b.YuLeCSMC,ylfwcsid,CiShu,a.DaKaSJ desc -- 这里已经是 查询的 T 表了 怎么还是 b, a 别名 ) as row, T.* from ( select b.YuLeCSMC,ylfwcsid,count(id) as CiShu,a.DaKaSJ from Info_DaKaJL a left join Info_YuLeCS b on YLFWCSID=b.YLCSID where b.ZhiAnGLJGDM like '%46%' group by b.YuLeCSMC,ylfwcsid,a.DaKaSJ union all select b.YuLeCSMC,ylfwcsid,count(id) as CiShu,\'合计\' from Info_DaKaJL a inner join Info_YuLeCS b on YLFWCSID=b.YLCSID where b.ZhiAnGLJGDM like '%46%' group by b.YuLeCSMC,ylfwcsid order by ylfwcsid,a.DaKaSJ ) T where 1=1 ) TT where TT.row between 1 and 10
1楼的 "高人" 真是见识广博.
建议 该括号的地方括号吧, 这样的代码容易 读来颇有歧义,
现在主要是union all这里之后就有问题了,我括号加上也是那样呀,求不吝赐教