none
如何让只用一条命令实现多个表的操作??----第二季----- RRS feed

  • 问题

  • 之前的问题,'zjcxc.邹建'做了非常完美的解答,但是我发现如果表中稍有改变,比如表1中有很多项目,而表2中只有关于A和B的开支,那么结果中也只会有A和B的项目显示.而其它项目则无法显示了! 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌

    例如下面的例子,只是在之前的表中多加了一些内容。

    -----------------------------------------------------------------------------------

    表1: 项目(nvarchar),收入合计(nvarchar),支出合计(nvarchar),说明(nvarchar),

    表2: 项目(nvarchar),收入(int),支出(int)

    ------------------------------------------------------

    表内容:

    表1: 项目   收入合计   支出合计    说明

            A           ''              ''          aaa

            B           ''              ''          bbb

            C           ''             ''          ccc

    表2: 项目       收入         支出

            A            1              ''

            A             ''              1

            A             2              ''

            B             3              ''

          ---------------------------------------------------------------------- 

    希望得到的结果:

           项目     收入合计     支出合计     说明

            A             3               1           aaa

            B             3               0           bbb

            C             0               0           ccc

    ----------------------------------------------------------------------

    也就是说'表1'中每个项目都添加了"说明",列表结果中要一并显示出来.

    而且'表1'内容中多了一个'C'的项目,而'表2'内容中并没有'C'的项目开支,但是列表结果中必须要根据'表1'中的各项进行显示,也就是说'表2'中查询不到的项目也要累计结果,只不过为'0'!

    只需要查询结果SELECT就行!

    2010年11月14日 0:12

答案

  • 自己查询多个资料,结合'ahdung_AI'的 http://social.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/ccc495a0-e96c-4001-bf83-7283b9b058bd帖子中的解决方法和''zjcxc.邹建''的解决方法,自己终于也搞定了!

    ---------------------------------------------

    SELECT
      表1.项目,
      收入合计 = SUM(表2.收入),
      支出合计 = SUM(表2.支出),
      表1.说明
      
     FROM  表1 
     LEFT JOIN 表2
     ON 表1.项目 = 表2.项目
     GROUP BY 表1.项目 ,表1.说明

    ------------------------------------------------

    自己又长进不少!好兴奋啊!

    • 已标记为答案 vboykk 2010年11月14日 1:36
    2010年11月14日 1:36
  • SELECT
    	A.项目,
    	收入合计 = ISNULL(B.收入合计, 0),
    	支出合计 = ISNULL(B.支出合计, 0),
    	A.说明
    FROM 表1 A
    	LEFT JOIN(
    		SELECT
    			项目,
    			收入合计 = SUM(收入合计),
    			支出合计 = SUM(支出合计)
    		FROM 表2
    		GROUP BY 项目
    	)B
    		ON A.项目 = B.项目
    
    • 已标记为答案 vboykk 2010年11月14日 9:25
    2010年11月14日 1:44

全部回复

  • 自己查询多个资料,结合'ahdung_AI'的 http://social.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/ccc495a0-e96c-4001-bf83-7283b9b058bd帖子中的解决方法和''zjcxc.邹建''的解决方法,自己终于也搞定了!

    ---------------------------------------------

    SELECT
      表1.项目,
      收入合计 = SUM(表2.收入),
      支出合计 = SUM(表2.支出),
      表1.说明
      
     FROM  表1 
     LEFT JOIN 表2
     ON 表1.项目 = 表2.项目
     GROUP BY 表1.项目 ,表1.说明

    ------------------------------------------------

    自己又长进不少!好兴奋啊!

    • 已标记为答案 vboykk 2010年11月14日 1:36
    2010年11月14日 1:36
  • SELECT
    	A.项目,
    	收入合计 = ISNULL(B.收入合计, 0),
    	支出合计 = ISNULL(B.支出合计, 0),
    	A.说明
    FROM 表1 A
    	LEFT JOIN(
    		SELECT
    			项目,
    			收入合计 = SUM(收入合计),
    			支出合计 = SUM(支出合计)
    		FROM 表2
    		GROUP BY 项目
    	)B
    		ON A.项目 = B.项目
    
    • 已标记为答案 vboykk 2010年11月14日 9:25
    2010年11月14日 1:44
  • 一般这种情况是表1的项目多于表2的项目,先GROUP BY 的方案会更好一些,否则的话,表1需要引用的列都要放入GROUP BY

    2010年11月14日 1:45
  • 佩服啊~我已经无语了!完全解决之前GROUP BY后要跟上所有表1的项目.

    实际运用中表1确实有很多项要显示,这下不用全部都放到GROUP BY中了!

    另外,我还想问一下,SELECT 中的 'A.项目,A.说明' 能不能通过 '*'省略呢,应为表1有好多项目. 也就是说能不能只在 SELECT 中添加其它表的值,其它就掠过照常现实就好了
    2010年11月14日 9:27
  • 可以使用A.*来取表1的所有列,只是这样的话,无法控制列顺序,如果你需要保证顺序,必须写列的列表(就是每个列摆在需要的位置),或者在程序引用的时候去调整列顺序
    2010年11月15日 1:30