我正在使用SQL库(编程库,ANSI SQL兼容,称为ABS数据库,(http://www.componentace.com/help/absdb_manual/absdbmanual_content.htm ),它支持多种连接,CASE等..SQL外部加入同一表中的多个总计列
我有一个表(聘任),这是约会的表。
ApptKey - Integer - Primary Key
SA_ID - Integer (a person’s ID, think employee number),
Layer - Integer – only 4 different values, 1, 2, 3 or 4 (think Appt Category)
Number_Of_Minutes - Integer – the length of the appointment
注意某些SA_ID /层的组合可能是空的(即没有行的组合)其他SA_ID /图层组合可能有多行(我没有显示其他列,因为它们在这里不相关)我需要一个报告来显示mi对于每个人(SA_ID),对于每个层,在一行中都是nute ...即,每个SA_ID具有它们自己的行,显示Layer = 1的总和,layer = 2的总和,Layer = 3的总和以及总和用于层= 4
实施例数据...
SA_ID LAYER Number_of_Minutes
1 1 10
1 1 30
2 1 10
3 2 10
1 4 10
我需要一个查询,给出了这样的结果。
SA_ID LAYER_1 LAYER_2 LAYER_3 LAYER_4
1 40 0 0 10
2 10 0 0 0
3 0 10 0 0
我需要这种类型的格式,因为此查询馈送图/图表组件...
我想我需要使用正确的加入多个相关子查询,但我不能让它上班。这是正确的做法吗?我在下面运行,但作为直接连接。我可以(或者我怎么)重写这个来使用正确的外连接?是一个正确的外部加入最好的方法?
select g.sa_id, l1.totalsum, l2.totalsum, l3.totalsum, l4.totalsum
from (select sa_id, layer, sum(number_of_minutes) totalsum from appt where layer = 1 group by sa_id, layer) l1,
(select sa_id, layer, sum(number_of_minutes) totalsum from appt where layer = 2 group by sa_id, layer) l2,
(select sa_id, layer, sum(number_of_minutes) totalsum from appt where layer = 3 group by sa_id, layer) l3,
(select sa_id, layer, sum(number_of_minutes) totalsum from appt where layer = 4 group by sa_id, layer) l4,
(select distinct sa_id "sa_id" from appt) g
where
(l1.sa_id = g.sa_id)
and (l2.sa_id = g.sa_id)
and (l3.sa_id = g.sa_id)
and (l4.sa_id = g.sa_id)
简单,优雅,它的作品!比加入更简单。谢谢! – user1009073 2012-01-12 13:30:14