SELECT d.id, COUNT(b.id) AS Expr1, SUM(a.number1) AS Expr2
FROM (SELECT projectid, COUNT(Id) AS number1
        FROM CardInfo
        GROUP BY projectid) a RIGHT OUTER JOIN
      project b ON a.projectid = b.projectid INNER JOIN
      sort d ON b.ismine = d.id
GROUP BY d.id WITH rollup         id       expr1    expr2
1 15 96
2 522 21043
3 37 1516
4 31 1335
5 49 63
6 76 908
7 98 2453
8 36 388
10 428 7052
12 8 246
13 1
1301 35100这是结果,还有一个表(sort),
id int 4 0
sortname varchar 50 1
这里的id对应出来是上一个结果的,然后显示sortname列(结果按照id排序)?
       sortname    expr1    expr2
s1 15 96
s2 522 21043
s3 37 1516
s4 31 1335
s5 49 63
s6 76 908
s7 98 2453
s8 36 388
s10 428 7052
s12 8 246
s3 1
1301 35100我想象中的是select d.sortname,c.expr1,c.expr2 from
(SELECT d.id, COUNT(b.id) AS Expr1, SUM(a.number1) AS Expr2
FROM (SELECT projectid, COUNT(Id) AS number1
        FROM CardInfo
        GROUP BY projectid) a RIGHT OUTER JOIN
      project b ON a.projectid = b.projectid INNER JOIN
      sort d ON b.ismine = d.id
GROUP BY d.id WITH rollup) c ,sort d
where c.id=d.id
order by c.id
但是WITH rollup始终不行,问怎么写这个sql
????

解决方案 »

  1.   

    rollup的结果不能作为子查询
      

  2.   

    这样试试:
    SELECT max(d.sortname) as sortname,     /*选择d.sortname*/
     COUNT(b.id) AS Expr1, SUM(a.number1) AS Expr2
    FROM (SELECT projectid, COUNT(Id) AS number1
            FROM CardInfo
            GROUP BY projectid) a RIGHT OUTER JOIN
          project b ON a.projectid = b.projectid INNER JOIN
          sort d ON b.ismine = d.id
    GROUP BY d.id WITH rollup
    ORDER BY d.id    /*按d.id排序*/