select a.user_id,b.user_space
from MEMBER a,
  (select user_id,user_space from mail_box_A 
         union
   select user_id,user_space from mail_box_B
         union
         ...... 
   select user_id,user_space from mail_box_Z) as b
where a.userid = b.userid似乎没有简单方法了   :-(

解决方案 »

  1.   

    查詢所有:
    select userid ,count(*) from mail_box_a  group by   userid 
    union
    select userid ,count(*) from mail_box_b  group by   userid 
    union
    select userid ,count(*) from mail_box_c  group by   userid 
    union
    select userid ,count(*) from mail_box_d  group by   userid 
    union
    select userid ,count(*) from mail_box_e  group by   userid ......union
    select userid ,count(*) from mail_box_z  group by   userid 
      

  2.   

    不明确你的意思,不知道这样行不行
    select user_id, sum(mail_size) from mail_box_x group by user_id
      

  3.   

    to  ny64(ny64):
      MAIL_BOX_X是26个表来的,从MAIL_BOX_A到MAIL_BOX_Z,邮件的存放到哪一个表是根据USER_ID的头一个字母来决定的(例如MAIL_BOX_A里放的邮件信息都是以A为第一个字母的用户)
      

  4.   

    select userid ,count(*) from mail_box_a  group by   userid 
    union
    select userid ,count(*) from mail_box_b  group by   userid 
    union
    select userid ,sum(mail_size) from mail_box_c  group by   userid 
    union
    select userid ,sum(mail_size) from mail_box_d  group by   userid 
    union
    select userid ,sum(mail_size) from mail_box_e  group by   userid ......union
    select userid ,sum(mail_size) from mail_box_z  group by   userid
      

  5.   

    1。使用联合:
    select USER_ID, sum(MAIL_SIZE) as USED_SPACE from
    (select USER_ID, MAIL_SIZE from MAIL_BOX_A
    union select USER_ID, MAIL_SIZE from MAIL_BOX_B
    ......
    union select USER_ID, MAIL_SIZE from MAIL_BOX_Z
    )
    group by USER_ID
    2。使用动态SQL执行:
    declare @X char(1)
    declare @userid char(10)
    select USER_ID into userid from MEMBER where ....
    set @X = left(userid, 1)
    exec("select USER_ID, sum(MAIL_SIZE) as USED_SPACE from  MAIL_BOX_"+@X+" where USER_ID = '"+@userid+"'")
      

  6.   

    declare  @exeStr varchar(4000)
    declare @s char(1)
    set @s='A'
    set @exeStr='select a.user_id,b.user_space from mail a, ( '
    while @s<='Z'
    begin
    set @exeStr=@exeStr+'select userid,count(*) from mail_box_'+@s+' group by userid '
    set @a=char(ascii(@a)+1)
    end
    set @exeStr=@exeStr+' ) b'exec (@exeStr) set 
    end
      

  7.   

    俺们同意
    hjhing(winding) ( )
      

  8.   

    你们的方法都试过了,不行:(
    我试过最简单的(仿照书本上的):
    select "TOTALSIZE"=(
      SELECT SUM(MAILSIZE) from mailbox_body_k 
      WHERE USER_ID=a.USER_ID
    )
    from member a
    都报错:
    服务器: 消息 446,级别 16,状态 9,行 21
    无法解决 equal to 操作的排序规则冲突。
    呜呜~~~~~~
      

  9.   

    to: tj_dns(愉快的登山者) 
    老兄又爬到五座山了
      

  10.   

    to Chiff(~o~):
      是的,用的是SQLServer 2000,有关系的吗?
      

  11.   

    create table #table
    (user_id varchar(100),user_space float(18) )
    insert into #table
    select user_id,count(*) from MAIL_BOX_a group by user_id
                            .
                            .
                            .
    insert into #table
    select user_id,count(*) from MAIL_BOX_X group by user_idselect * from #tabledrop table #table
      

  12.   

    不好意思前面是统计记录数。
    create table #table
    (user_id varchar(100),user_space float(18) )
    insert into #table
    select user_id,sum(MAIL_SIZE) from MAIL_BOX_a group by user_id
                            .
                            .
                            .
    insert into #table
    select user_id,sum(MAIL_SIZE) from MAIL_BOX_X group by user_idselect * from #tabledrop table #table
      

  13.   

    做了一个实验:
    select (
      select count(*) from MEMBER b where b.USER_ID = a.USER_ID
            ) as aaa
    from member a
    成功返回记录信息select (
      select count(*) from mailbox_body_k b where b.USER_ID = a.US
            ) as aaa
     from member a
    却出错了,百思不得其解。
    服务器: 消息 446,级别 16,状态 9,行 20
    无法解决 equal to 操作的排序规则冲突。
    一个表都不行,更不用说是26个表了:(
      

  14.   

    看一下你的mailbox_body_k 表的US字段的排序规则是不是和member 表的USER_ID 字段的的排序规则不同。
    导出建表语句看看!!
      

  15.   

    脚本如下,请过目:
    CREATE TABLE [dbo].[MEMBER] (
    [USER_ID] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [USER_PA] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [USER_EMAIL] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [NICK_NAME] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [GROUP_ID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [RIGHT] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[MAILBOX_BODY_K] (
    [USER_ID] [varchar] (50) COLLATE Chinese_PRC_CS_AS NOT NULL ,
    [SEND_NAME] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL ,
    [SEND_EMAIL] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL ,
    [SEND_DATA] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL ,
    [SUBJECT] [varchar] (200) COLLATE Chinese_PRC_CS_AS NULL ,
    [CONTENT] [text] COLLATE Chinese_PRC_CS_AS NULL ,
    [SIZE] [int] NULL ,
    [MAILBOX_PATH] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL ,
    [ADDRROOM] [char] (2) COLLATE Chinese_PRC_CS_AS NULL ,
    [MOTELY] [varchar] (50) COLLATE Chinese_PRC_CS_AS NULL 
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
      

  16.   

    to:zzhuz(大件)
    try below:select (
      select count(*) from mailbox_body_k b where b.[USER_ID] = a.[USER_ID] COLLATE Chinese_PRC_CI_AS
            ) as aaa
     from member a
      

  17.   

    to:zzhuz(大件)
    给你提个建议
    1.给 member,mailbox_body_k添加主键
    2.不要使用SQL SERVER默认的字符串,如:USER_ID,SIZE...
    3.MEMBER和mailbox_body_X的关系不明确
      

  18.   

    我觉得这样会好做些,建一个视图或建一个UDF。比如视图:
    select top 100 percent user_id,mail_size from 
    (
    select user_id,mail_size from mail_box_a 
    union all
    select user_id,mail_size from mail_box_b
    union all
    select user_id,mail_size from mail_box_c
    ....
    ) t0
    查询时就简单多了。
      

  19.   

    我写SP,是根据USER_ID选择表,不知是否符合你的要求?
    create proc usp_getmailsize
    @user_id varchar(30)
    as
    BEGIN
    declare @rc int,
    @firstChar char(2),
    @Mailbox_name varchar(30),
    @str varchar(2000),
    @TEMP varchar(2000)
    select @rc=0if  @user_id is null
    begin
    select @rc=-1
    return @rc
    endselect @firstChar =left(@user_ID,1) where left(@user_ID,1) like '[A-Za-z]'
    if @firstChar is null
    begin
    select @rc=-2
    return @rc
    endselect @Mailbox_name='mailbox_body'select @str=@Mailbox_name+'_'+@firstChar
    --print @str
    SET @TEMP= 'select a.[user_id],sum(b.[size]) from member a  left outer join '+ @str+' b on a.[user_id]=b.[user_id] COLLATE Chinese_PRC_CI_AS
    group by a.[User_id]'
    EXEC (@TEMP)
    SELECT @RC=@@ERROR
    IF @RC<>0
    begin
    select @rc=-3
    return @rc
    end
    END
    go
    exec usp_getmailsize 'kest'
      

  20.   

    哈哈解决了where后面加上COLLATE  Chinese_PRC_CI_AS  就ok了:)
    这问题困了我整天一会儿给分
    这版的人太热情了,特别感谢Chiff(~o~)和leimin(黄山光明顶)。100分不够分,另开了张贴
    http://expert.csdn.net/Expert/topic/1171/1171838.xml?temp=.6509516
    Chiff(~o~)、leimin(黄山光明顶)进来拿分吧~~
      

  21.   

    应该考虑一下icevi(按钮工厂) 的方法!