SQL Server循环查询

阿米亚·德什潘德(Ameya Deshpande)

我有4个表,因为我想从所有4个表中获取记录并汇总值

我有这些桌子

在此处输入图片说明

我期望这个输出

在此处输入图片说明

但是将此输出作为笛卡尔积

在此处输入图片说明

它使费用和分配成倍增加

这是我的查询

select 
    a.NAME, b.P_NAME,
    sum(a.DURATION) DURATION,
    sum(b.[EXP]) EXPEN 
from
    (select 
         e.ID, a.P_ID, e.NAME, a.DURATION DURATION 
     from 
         EMPLOYEE e 
     inner join 
         ALLOCATION a ON e.ID = a.E_ID) a
inner join 
    (select 
         p.P_ID, e.E_ID, p.P_NAME, e.amt [EXP] 
     from 
         PROJECT p 
     inner join 
         EXPENSES e ON p.P_ID = e.P_ID) b ON a.ID = b.E_ID 
                                          and a.P_ID = b.P_ID 
group by 
    a.NAME, b.P_NAME

任何人都可以提出一些建议。

阿米亚·德什潘德(Ameya Deshpande)

嗨,我从查询中的一些修改中得到了我想要的答案

上面的查询也很有效,并且对原始查询进行了一些修改并得到了答案

只需将内部查询分组,然后加入查询,它将不会显示笛卡尔积

这是更新的

select a.NAME,b.P_NAME,sum(a.DURATION) DURATION,sum(b.[EXP]) EXPEN from

(select e.ID,a.P_ID, e.NAME,sum(a.DURATION) DURATION from EMPLOYEE e inner join ALLOCATION a
ON e.ID=a.E_ID group by e.ID,e.NAME,a.P_ID) a

inner join 

(select p.P_ID,e.E_ID, p.P_NAME,sum(e.amt) [EXP] from PROJECT p inner join EXPENSES e 
ON p.P_ID=e.P_ID group by p.P_ID,p.P_NAME,e.E_ID) b 

ON a.ID=b.e_ID and a.P_ID=b.P_ID group by a.NAME,b.P_NAME

显示正确的输出

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章