2013-03-13 53 views
0

我有一个费用表像分组值的总和:创建/附加表中不同类别

WorkWeek Catg Item Cost 
WorkWeek1 Cat1 Item1 Price 
WorkWeek1 Cat1 Item2 Price 
WorkWeek1 Cat1 Item3 Price 
WorkWeek1 Cat1 Item4 Price 
WorkWeek1 Cat2 Item1 Price 
WorkWeek1 Cat2 Item5 Price 
WorkWeek1 Cat2 Item6 Price 
WorkWeek1 Cat3 Item1 Price 
WorkWeek1 Cat3 Item5 Price 
. 
. 
WorkWeekA CatB ItemC Price 

这是我正在做它现在:

select top(1) 
    (select sum(cost) from DataTable where Catg like 'Cat1') as Cat1TotalCost 
    ,(select sum(cost) from DataTable where Catg like 'Cat2') as Cat2TotalCost 
    ,(select sum(cost) from DataTable where Catg like 'Cat3') as Cat3TotalCost 
    . 
    . 
    . 
    . 
from DataTable where WorkWeek like 'WorkWeek1' 

而且如果我不使用top 1,然后我得到相同数目的重复数千行。另外,我的做法仅占1个工作周。 :(

我想每一个工作周总费用根据每个类别像创建一个表:

WorkWeek1 Cat1TotalCost Cat2TotalCost Cat3TotalCost 
WorkWeek2 Cat1TotalCost Cat2TotalCost Cat3TotalCost 
. 
. 
+0

欢迎来到SO。你能编辑你的文章并在底部添加你的问题吗?我可以弄明白,但没有明确说明。 – PowerUser 2013-03-13 20:36:35

+0

你有没有定义数量的类别? – 2013-03-13 20:42:01

+0

是的,我会的。大约有2500只猫,它们可能会增加更多。 另外,Catgs列当前有catg_num,另外还有一个包含相应catg_names的表。我实际上想用一些连接来获取catg_names。 – camelbrush 2013-03-13 22:51:19

回答

0

试试这个:

select 
    workweek 
    ,(select sum(cost) from DataTable where Catg = 'Cat1') as Cat1TotalCost 
    ,(select sum(cost) from DataTable where Catg = 'Cat2') as Cat2TotalCost 
    ,(select sum(cost) from DataTable where Catg = 'Cat3') as Cat3TotalCost 
    . 
    . 
    . 
    . 
from DataTable 
group by Workweek 

现在,你是每周工作领域分组此外,我将like更改为=以使其稍快。

+0

谢谢。这工作现在。 :) – camelbrush 2013-03-14 15:33:30

+0

没问题。如果类别数量可能会在没有通知的情况下发生变化,您应该探索数据透视查询。否则,这就好了。 – PowerUser 2013-03-14 16:09:49

+0

嘿。 上述查询正在总结所有'成本'列catg = cat1 所以,我得到了,所有工作周数都是相同的。我能以某种方式总结它只对应于它所在的工作周吗? – camelbrush 2013-03-21 12:31:57

0

看起来您有很多类别,您是否在寻找gr ouping?

select worksheet, category, sum(cost) from DataTablegroup by worksheet, category order by worksheet 
+0

我正在做的是创建一个新表每个类别在其自己的栏目下的总价格。 – camelbrush 2013-03-13 21:14:02