现在有两张表,其中需要主要的字段有 表A : 房屋id  日期   金额  类别(里面有水费,点费,其它什么的)  然后表B: 房屋id  日期  金额  类别(里面也有水费,点费 ,但两个表里有可能其中的类别只有一个有)    现在需要的是取出 按照房屋 日期 类别 进行金额的统计 就是一个房间 这一天  各种类别费用的累加  。我应该怎么进行分组才能取出来啊? 因为两个类别里有相同的 也有不同的 谢谢了啊sql

解决方案 »

  1.   

    例如:
    t1 结构:`id` int(11) NOT NULL,
      `room_id` int(11) NOT NULL,
      `date` date NOT NULL,
      `type1` int(11) NOT NULL,
      `money` double(13,0) DEFAULT NULL,
    t2 结构:`id` int(11) NOT NULL,
      `room_id` int(11) NOT NULL,
      `date` date NOT NULL,
      `type2` int(11) NOT NULL,
      `money` double(13,0) DEFAULT NULL,其中数据:我现在需要显示的样子:      房间    日期    类别1   类别2  类别3  类别4......
           01     12-1    500      100    20就是按照类别把两个表中的金额按照房间  日期的进行累加下 然后在列表出来
     
      

  2.   

    如果类别是固定的几种 不知道这么做可以么.
    with t1 as
    (
         select 1 rid,date'2013-09-10' rdate,2 tid,50 money from dual union all
         select 1 rid,date'2013-09-10' rdate,4 tid,40 money from dual union all
         select 2 rid,date'2013-09-11' rdate,1 tid,100 money from dual 
    ),t2 as
    (
         select 1 rid,date'2013-09-10' rdate,1 tid,100 money from dual union all
         select 2 rid,date'2013-09-11' rdate,2 tid,150 money from dual union all
         select 1 rid,date'2013-09-11' rdate,3 tid,120 money from dual union all
         select 2 rid,date'2013-09-11' rdate,1 tid,110 money from dual  
    )select rid,rdate,
           sum(decode(tid,1,money,0)) "类别1",sum(decode(tid,2,money,0)) "类别2",
           sum(decode(tid,3,money,0)) "类别3",sum(decode(tid,4,money,0)) "类别4"
           
    from (select * from t1 union all select * from t2) t
    group by rid,rdate
    order by rid,rdate
         rid     rdate   类别1  类别2  类别3  类别4
    ------------------------------------------------------------------
    1 1 2013/9/10 100 50 0 40
    2 1 2013/9/11 0 0 120 0
    3 2 2013/9/11 210 150 0 0
      

  3.   

    11g写法
    select *
    from (select * from t1 union all select * from t2) t
    pivot (sum(money) for tid in (1 "类别1",2 "类别2",3 "类别3",4 "类别4"))
    order by rid,rdate 
      

  4.   

    我想问下如果是2个表里的字段不是取的全部怎么办? 并且2个表的取的字段数是不一样的
    那应该在
    from (select * from t1 union all select * from t2) t  
    这个里面把* 代替了?
      

  5.   

    并且二个表中表示同样的字段的取名名称不一样怎么办? 会不会影响 union all 的使用   就是说例如日期的表示  一个表中的字段名字是date  但另外一个表中表示日期的那个字段就叫time  但我需要取每一天的相同日期的进行累加还是
      

  6.   

    需要什么字段就取什么字段不管多少个union all 字段只是个别名 都是根据第一个select来显示字段名也就是select date from tb1 union all select time from tb2 查询出来的就是字段date
      

  7.   

    呃,我表示还是没有做出来.希望您能帮助下,我现在把表的结构列出:表A : 
    FRevMoneyType 款项类型(字符串类型)
    FRoomID          房屋
    FBizDate 业务日期
    FMoney         金额
    以及其它字段....
    表B:
    FRoomID 房屋
    FBizDate 业务日期
    FDepositSortID 押金类别
    FActGatheringAmo 已收金额
    其它字段
    (押金类别表里   有id  有名称 )表C:
    FRoomID 房屋
    FBizDate 业务日期
    FDepositSortID 款项类别
    FPayAmount 收款金额
    其它字段 
    现在需要的就是按照日期 房屋ID 以及各种收费类别(3个表里的类别有的是名称  有的需要关联外键)以及各种类别的当天的统计金额来  应该怎么关联啊  非常万分感谢您啊
      

  8.   

    表A : 
    FRevMoneyType款项类型(字符串类型)   FRoomID房屋   FBizDate业务日期   FMoney金额 以及其它字段....
      水费                                  01            2013-09-12        50
      电费                                  02            2013-09-11        100
      复印费                                02            2013-09-12        30表B:
    FRoomID房屋      FBizDate业务日期    FDepositSortID押金类别    FActGatheringAmo已收金额 其它字段
    (还有个押金类别表里   有id  有名称 )
    01                 2013-09-11             02                      40
    02                 2013-09-10             01                      50押金类别表:
    id           name
    01           施工单位押金
    02           装修登记证押金
    03           物业费
    04           水费表C:
    FRoomID房屋       FBizDate业务日期        FDepositSort款项类别   FPayAmount收款金额  其它字段 
    01                   2013-09-11                  水费                60      
    02                   2013-09-12                  物业费              100最后需要的结果应该是这样的::房屋         日期             水费     电费       物业费    装修登记证押金  复印费  等等其它的所有费用01           2013-09-11       3个表水费的总价  3个表电费的总价  ...类推
    01           2013-09-12       同上
    02           2013-09-11       ...非常感谢您的帮助..