pa_infor 表
pa_id         pa_name
20064350120 张三
20064350121 李四
20064350122 王五
20064350123 赵六
20064350124 刘琦
20064350125 朱八fee_infor 表
fee_id   fee_name
0001 检查费
0002 诊疗费
0003 B超费
0004 床位费
0005 护理费
0006 手术费fee_record 表
pa_id           fee_id  charge
20064350120 0001 11.54
20064350120 0001 12.27
20064350120 0002 12.5
20064350121 0004 21.57
20064350121 0005 17.5
20064350121 0006 21.5
20064350122 0002 21.5
20064350125 0004 31.2
20064350122 0002 31.51sql 1
SELECT pa_infor.pa_name, fee_infor.fee_name, ISNULL(SUM(fee_record.charge), 0.00) 
      AS sumfee
FROM pa_infor LEFT OUTER JOIN
      fee_record ON pa_infor.pa_id = fee_record.pa_id ,
      fee_infor LEFT OUTER JOIN
      fee_record fee_record_1 ON fee_infor.fee_id = fee_record_1.fee_id
GROUP BY pa_infor.pa_name, fee_infor.fee_name
ORDER BY pa_infor.pa_name张三 检查费 23.81
张三 诊疗费 12.50
李四 床位费 21.57
李四 护理费 17.50
李四 手术费 21.50
王五 诊疗费 53.01
朱八 床位费 31.20不完备,要求如果费用没有就显现费用为0sql 2
SELECT pa_infor.pa_name, fee_infor.fee_name ,isnull(sum(fee_record.charge),0.00) as sumfeeFROM pa_infor LEFT OUTER JOIN
      fee_record ON pa_infor.pa_id = fee_record.pa_id ,
      fee_infor LEFT OUTER JOIN
      fee_record fee_record_1 ON fee_infor.fee_id = fee_record_1.fee_id
GROUP BY pa_infor.pa_name, fee_infor.fee_name
ORDER BY pa_infor.pa_name李四 B超费 60.57
李四 床位费 121.14
李四 护理费 60.57
李四 检查费 121.14
李四 手术费 60.57
李四 诊疗费 181.71
刘琦 B超费 .00
刘琦 床位费 .00
刘琦 护理费 .00
刘琦 检查费 .00
刘琦 手术费 .00
刘琦 诊疗费 .00
王五 B超费 53.01
王五 床位费 106.02
王五 护理费 53.01
王五 检查费 106.02
王五 手术费 53.01
王五 诊疗费 159.03
张三 B超费 36.31
张三 床位费 72.62
张三 护理费 36.31
张三 检查费 72.62
张三 手术费 36.31
张三 诊疗费 108.93
赵六 B超费 .00
赵六 床位费 .00
赵六 护理费 .00
赵六 检查费 .00
赵六 手术费 .00
赵六 诊疗费 .00
朱八 B超费 31.20
朱八 床位费 62.40
朱八 护理费 31.20
朱八 检查费 62.40
朱八 手术费 31.20
朱八 诊疗费 93.60
是错误的,没有算对

解决方案 »

  1.   

    SELECT 
    (select pa_name from pa_infor where fee_record.pa_id = pa_infor.pa_id) as pa_name , 
    (select fee_name from fee_infor where fee_record.fee_id = fee_infor.fee_id) as fee_name ,
    sum(charge)
    FROM fee_record
    group by  pa_id , fee_id
    order by pa_id
    是第一个的sql ,不好意思弄错了
      

  2.   


    select a.pa_name,b.fee_name,isnull(sum(c.charge),0.00) as sumfee
    from pa_infor a,fee_infor b,fee_record c
    where a.pa_id=c.pa_id and b.fee_id=c.fee_id
    group by a.pa_name,b.fee_name
    order by a.pa_name
    --试下?不过你第2个SQL结果不对是指什么不对?
      

  3.   

    geniuswjt 理解错误 ,应该是
    赵六 B超费 .00
    赵六 床位费 .00
    赵六 护理费 .00
    赵六 检查费 .00
    赵六 手术费 .00
    赵六 诊疗费 .00
    每种费用都要出来,没有产生的费用要是0.00
      

  4.   

    要求效果是第二种,但是我写的sql有问题啦,求的费用合计是错误的
      

  5.   

    cross join isnullfull join
      

  6.   


    declare @pa_infor table(pa_id varchar(12),pa_name varchar(10)) 
    insert into @pa_infor(pa_id,pa_name)
    select '20064350120','张三' union all
    select '20064350121','李四' union all
    select '20064350122','王五' union all
    select '20064350123','赵六' union all
    select '20064350124','刘琦' union all
    select '20064350125','朱八'declare @fee_infor table (fee_id varchar(5),fee_name varchar(10))
    insert into @fee_infor(fee_id,fee_name)
    select '0001','检查费' union all
    select '0002','诊疗费' union all
    select '0003','B超费' union all
    select '0004','床位费' union all
    select '0005','护理费' union all
    select '0006','手术费'declare @fee_record table (pa_id varchar(12),fee_id varchar(5),charge money)
    insert into @fee_record(pa_id,fee_id,charge)
    select '20064350120','0001',11.54 union all
    select '20064350120','0001',12.27 union all
    select '20064350120','0002',12.5 union all
    select '20064350121','0004',21.57 union all
    select '20064350121','0005',17.5 union all
    select '20064350121','0006',21.5 union all
    select '20064350122','0002',21.5 union all
    select '20064350125','0004',31.2 union all
    select '20064350122','0002',31.51select e.pa_name,e.fee_name,SUM(e.charge) as sumfee from (
    select c.*,ISNULL(d.charge,0) as charge from (
    select a.fee_id,a.fee_name,b.pa_id,b.pa_name from @fee_infor as a cross join @pa_infor as b) as c left join @fee_record as d on c.fee_id=d.fee_id and c.pa_id=d.pa_id) as e
    group by e.fee_name,e.pa_name
    -------------------------------------------------------------
    pa_name    fee_name   sumfee
    ---------- ---------- ---------------------
    李四         B超费        0.00
    李四         床位费        21.57
    李四         护理费        17.50
    李四         检查费        0.00
    李四         手术费        21.50
    李四         诊疗费        0.00
    刘琦         B超费        0.00
    刘琦         床位费        0.00
    刘琦         护理费        0.00
    刘琦         检查费        0.00
    刘琦         手术费        0.00
    刘琦         诊疗费        0.00
    王五         B超费        0.00
    王五         床位费        0.00
    王五         护理费        0.00
    王五         检查费        0.00
    王五         手术费        0.00
    王五         诊疗费        53.01
    张三         B超费        0.00
    张三         床位费        0.00
    张三         护理费        0.00
    张三         检查费        23.81
    张三         手术费        0.00
    张三         诊疗费        12.50
    赵六         B超费        0.00
    赵六         床位费        0.00
    赵六         护理费        0.00
    赵六         检查费        0.00
    赵六         手术费        0.00
    赵六         诊疗费        0.00
    朱八         B超费        0.00
    朱八         床位费        31.20
    朱八         护理费        0.00
    朱八         检查费        0.00
    朱八         手术费        0.00
    朱八         诊疗费        0.00
      

  7.   

    非常感谢 chtzhking 的回答,这个就是我要的.thanks,也感谢大家的参与...