兄弟:
    你好!上周你回答了我的问题,现在我的问题又来了,还是老问题,能帮我么?
原来我问的问题是下面这个问题:
      销售额   排名    销售成本   排名
成都    100              30
乐山     70              25  
德阳     90              35
绵阳     80              15
-------------------------------------------
我现在就想,写个SQL语句能不能达到如下效果:
      销售额   排名    销售成本   排名
成都    100     1        30        2
德阳     90     2        35        1
绵阳     80     3        15        4
乐山     70     4        25        3 
合计    340             105
你写的语句是
SELECT aa.地区, 销售额, aa.排名1 AS 排名, 销售成本, bb.排名2 AS 排名
FROM (SELECT a.地区, a.销售额, COUNT(*) AS 排名1
        FROM cheshi1 a, cheshi1 b
        WHERE a.销售额 <= b.销售额
        GROUP BY a.地区, a.销售额) aa,
          (SELECT a.地区, a.销售成本, COUNT(*) AS 排名2
         FROM cheshi1 a, cheshi1 b
         WHERE a.销售成本 <= b.销售成本
         GROUP BY a.地区, a.销售成本) bb
WHERE aa.地区 = bb.地区
ORDER BY aa.排名1
union SELECT 地区 = '合计', 销售额 = SUM(销售额), NULL, 销售成本 = SUM(销售成本), NULL
FROM cheshi1
但是现在问题又变复杂了,我这个小菜鸟写了一阵子,还是搞不定,只好求助于你了。
这个问题就是如下的问题。
      销售额   排名    销售成本   排名  月份
成都    100              30             1
乐山     80              25             1 
德阳     70              35             1
绵阳     80              15             1
成都    110              35             2
乐山     75              35             2 
德阳     75              40             2
绵阳     70              20             2
-------------------------------------------
我现在就想,写个SQL语句能不能达到如下效果:
      销售额   排名    销售成本   排名
成都    210     1        65        2
德阳    155     2        60        3
绵阳    145     3        75        1
乐山    150     4        35        4 
合计    660             235
兄弟拜托了,我的QQ是5421509,我的e-mail是[email protected]

解决方案 »

  1.   

    SELECT aa.地区, 销售额, aa.排名1 AS 排名, 销售成本, bb.排名2 AS 排名
    FROM (SELECT a.地区, a.销售额, COUNT(*) AS 排名1
            FROM (select 地区,sum(销售额) as 销售额 from cheshi1 ) a, 
                 (select 地区,sum(销售额) as 销售额 from cheshi1 ) b
            WHERE a.销售额 <= b.销售额
            GROUP BY a.地区, a.销售额) aa,
              (SELECT a.地区, a.销售成本, COUNT(*) AS 排名2
             FROM (select 地区,sum(销售成本) as 销售成本 from cheshi1 ) a, 
                  (select 地区,sum(销售成本) as 销售成本 from cheshi1 ) b
             WHERE a.销售成本 <= b.销售成本
             GROUP BY a.地区, a.销售成本) bb
    WHERE aa.地区 = bb.地区
    ORDER BY aa.排名1
    union SELECT 地区 = '合计', 销售额 = SUM(销售额), NULL, 销售成本 = SUM(销售成本), NULL
    FROM cheshi1
      

  2.   

    错了,应该还少了一句……SELECT aa.地区, 销售额, aa.排名1 AS 排名, 销售成本, bb.排名2 AS 排名
    FROM (SELECT a.地区, a.销售额, COUNT(*) AS 排名1
            FROM (select 地区,sum(销售额) as 销售额 from cheshi1 group by 地区) a, 
                 (select 地区,sum(销售额) as 销售额 from cheshi1 group by 地区) b
            WHERE a.销售额 <= b.销售额
            GROUP BY a.地区, a.销售额) aa,
              (SELECT a.地区, a.销售成本, COUNT(*) AS 排名2
             FROM (select 地区,sum(销售成本) as 销售成本 from cheshi1 group by 地区) a, 
                  (select 地区,sum(销售成本) as 销售成本 from cheshi1 group by 地区) b
             WHERE a.销售成本 <= b.销售成本
             GROUP BY a.地区, a.销售成本) bb
    WHERE aa.地区 = bb.地区
    ORDER BY aa.排名1
    union SELECT 地区 = '合计', 销售额 = SUM(销售额), NULL, 销售成本 = SUM(销售成本), NULL
    FROM cheshi1
      

  3.   

    最简单的办法就是用一个临时表或者查询
    select 地区,sum(销售成本) as 销售成本, sum(销售额) as 销售额 from cheshi1 group by 地区
    (或者select 地区,sum(销售成本) as 销售成本, sum(销售额) as 销售额 into #cheshi from cheshi1 group by 地区)
    然后将以前的查询语句中的cheshi1替换成上面的查询或者#cheshi就行了。
      

  4.   

    我又改了下,呵呵,我想能达到我的目的了。
    (SELECT aa.地区, 销售额, aa.排名1 AS 排名, 销售成本, bb.排名2 AS 排名
    FROM (SELECT a.地区, a.销售额, COUNT(*) AS 排名1
            FROM (SELECT 地区, SUM(销售额) AS 销售额
                    FROM cheshi1
                    GROUP BY 地区) a,
                      (SELECT 地区, SUM(销售额) AS 销售额
                     FROM cheshi1
                     GROUP BY 地区) b
            WHERE a.销售额 <= b.销售额
            GROUP BY a.地区, a.销售额) aa,
              (SELECT a.地区, a.销售成本, COUNT(*) AS 排名2
             FROM (SELECT 地区, SUM(销售成本) AS 销售成本
                     FROM cheshi1
                     GROUP BY 地区) a,
                       (SELECT 地区, SUM(销售成本) AS 销售成本
                      FROM cheshi1
                      GROUP BY 地区) b
             WHERE a.销售成本 <= b.销售成本
             GROUP BY a.地区, a.销售成本) bb
    WHERE aa.地区 = bb.地区)
    UNION
    (SELECT 地区 = '合计', 销售额 = SUM(销售额), NULL, 销售成本 = SUM(销售成本), NULL
    FROM cheshi1)
    ORDER BY aa.排名1
      

  5.   

    该给firetoucher(风焱) 分了,不要光说不结帐啊哈哈
      

  6.   

    好的,我给分,如果觉得分不够,我还可以多给分。
    mrfanghansheng(☆☆☆木鱼☆☆☆) 你想要多少分哦? firetoucher(风焱) 你想要多少分哦? 2位辛苦了!
      

  7.   

    (SELECT aa.地区, 总收益, aa.排序1 AS 排序, 总面积, bb.排序2 AS 排序, 招拍挂占出让面积, 
          cc.排序3 AS 排序, 招拍挂占经营性用地面积, dd.排序4 AS 排序
    FROM (SELECT a.地区, a.总收益, COUNT(*) AS 排序1
            FROM (SELECT 地区, SUM(总收益) AS 总收益
                    FROM bingtu
                    WHERE 县市区 = '合计'
                    GROUP BY 地区) a,
                      (SELECT 地区, SUM(总收益) AS 总收益
                     FROM bingtu
                     WHERE 县市区 = '合计'
                     GROUP BY 地区) b
            WHERE a.总收益 <= b.总收益
            GROUP BY a.地区, a.总收益) aa,
              (SELECT a.地区, a.总面积, COUNT(*) AS 排序2
             FROM (SELECT 地区, SUM(总面积) AS 总面积
                     FROM bingtu
                     WHERE 县市区 = '合计'
                     GROUP BY 地区) a,
                       (SELECT 地区, SUM(总面积) AS 总面积
                      FROM bingtu
                      WHERE 县市区 = '合计'
                      GROUP BY 地区) b
             WHERE a.总面积 <= b.总面积
             GROUP BY a.地区, a.总面积) bb,
              (SELECT a.地区, a.招拍挂占出让面积, COUNT(*) AS 排序3
             FROM (SELECT 地区, SUM(招拍挂面积) / SUM(出让面积) AS 招拍挂占出让面积
                     FROM bingtu
                     WHERE 县市区 = '合计'
                     GROUP BY 地区) a,
                       (SELECT 地区, SUM(招拍挂面积) / SUM(出让面积) 
                            AS 招拍挂占出让面积
                      FROM bingtu
                      WHERE 县市区 = '合计'
                      GROUP BY 地区) b
             WHERE a.招拍挂占出让面积 <= b.招拍挂占出让面积
             GROUP BY a.地区, a.招拍挂占出让面积) cc,
              (SELECT a.地区, a.招拍挂占经营性用地面积, COUNT(*) AS 排序4
             FROM (SELECT 地区, SUM(招拍挂面积) / SUM(经营性用地面积) 
                           AS 招拍挂占经营性用地面积
                     FROM bingtu
                     WHERE 县市区 = '合计'
                     GROUP BY 地区) a,
                       (SELECT 地区, SUM(招拍挂面积) / SUM(经营性用地面积) 
                            AS 招拍挂占经营性用地面积
                      FROM bingtu
                      WHERE 县市区 = '合计'
                      GROUP BY 地区) b
             WHERE a.招拍挂占经营性用地面积 <= b.招拍挂占经营性用地面积
             GROUP BY a.地区, a.招拍挂占经营性用地面积) dd
    WHERE aa.地区 = bb.地区 AND aa.地区 = cc.地区 AND aa.地区 = dd.地区)
    UNION
    (SELECT 地区 = '合计', 总收益 = SUM(总收益), NULL, 总面积 = SUM(总面积), NULL, 
          招拍挂占出让面积 = SUM(招拍挂面积) / SUM(出让面积), NULL, 
          招拍挂占经营性用地面积 = SUM(招拍挂面积) / SUM(经营性用地面积), NULL
    FROM bingtu WHERE 县市区 = '合计')
    ORDER BY aa.排序1