2013-10-24 28 views
-1

我想要做的是将多个行选择到临时表的单个行中。临时表中应该有1行列出所有不同的应计值。这是下面的代码:选择多个行到单个行临时表

declare @RunDate varchar(7) 
set @RunDate = '2013-07' 

declare @ShortItemNo1 int 

set @ShortItemNo1 = 723639 




declare @SalesAccruals table(QuantityShipped int, ShortItemNo int, GrossAmount money, AccrualReturns money, AccrualMedicaid money, 
          AccrualChargebacks money) 

insert @SalesAccruals 

select 
    sum(s.QuantityShipped) QuantityShipped, 
    s.ShortItemNo, 
    sum(s.ExtendedPrice) ExtendedPrice, 
    case when aa.AccrualType=3 then sum(a.AccrualAmount) end, 
    case when aa.AccrualType=8 then sum(a.AccrualAmount) end, 
    case when aa.AccrualType=2 then sum(a.AccrualAmount) end 
from 
    SalesSummary s join Accruals a on 
     s.SalesSummaryGuid = a.SalesSummaryGuid 
    join AccrualsSetup aa on 
     a.AccrualsSetupGuid = aa.AccrualsSetupGuid 
    join LookupAccrualTypes la on 
     la.AccrualTypeID = aa.AccrualType 

where 
    convert(varchar(7), InvoiceDate, 20) = @RunDate 
    and s.ShortItemNo in (@ShortItemNo1) 
group by 
    s.ShortItemNo, 
    aa.AccrualType 

select * from @SalesAccruals 
+0

你可以提供你想要的临时表中的样本数据吗? – David

+0

现在select语句返回四行,因为有四种不同的应计类型。我想要将所有应计类型的一行选入临时表中。我不确定case case语句是否是最好的方法... – Jeff

+0

现在它按照我想要的方式工作,但列中的其他值为空值。任何方式摆脱这些? – Jeff

回答

0

试着改变你的查询是这样的SELECT部分...

select 
    sum(s.QuantityShipped) QuantityShipped, 
    s.ShortItemNo, 
    sum(s.ExtendedPrice) ExtendedPrice, 
    sum(case when aa.AccrualType=3 then a.AccrualAmount else 0 end), 
    sum(case when aa.AccrualType=8 then a.AccrualAmount else 0 end), 
    sum(case when aa.AccrualType=2 then a.AccrualAmount else 0 end) 

然后从GROUP BY删除aa.AccrualType

+0

工作就像一个魅力。谢谢,我的朋友。 – Jeff