通过子查询我试图将值和类别插入外部查询的列中。
这使得它比简单的转置更复杂。 'origin'列的列标题需要作为另一列的值插入,'origin'列的值进入另一列,如下所示:
CYWP Name Qty PR2
201607 M3 618400 0
201607 R1 329400 0
201607 M1 100056 0
201607 M2 20800 0
201607 R2 878921 113884
变为:
CYWP Name Qty
201607 M3 618400
201607 R1 329400
201607 M1 100056
201607 M2 20800
201607 R2 878921
201607 PR2 113884
我到目前为止的代码;
select p.CuttingYearWeekPlanned, ps.Name,
sum(case when p.ProductionStateIdTo = 2 or p.ProductionStateIdTo =101
then ( case when p.QuantityPlannedAdjusted > 0
then p.QuantityPlannedAdjusted
else p.QuantityPlanned end)
else ( case when p.QuantityPlannedAdjusted > 0
then ceiling(convert(decimal(10,1),p.QuantityPlannedAdjusted)/100)*100
else ceiling(convert(decimal(10,1),p.QuantityPlanned)/100)*100 end)
end) as qtyplanned,
sum(case when p.ProductionStateIdTo = 101 and b.QuantityPreR2OrPlastic > 0
then b.QuantityPreR2OrPlastic
else 0
end) as PR2
from ProductionOrder p
inner join ProductionState ps on p.ProductionStateIdTo = ps.ProductionStateId
inner join Batch b on p.BatchId = b.BatchId
group by p.CuttingYearWeekPlanned, ps.Name
困难在于'Qty'列中的值来自不同的表,然后是'PR2'列的值。外部查询中的'group by'子句开始弄乱我的总和,我每次尝试转置并插入PR2列的结果。
答案 0 :(得分:0)
我认为这是union all
。我不知道你的查询与你的问题有什么关系 - 问题提到了一个表,但查询有很多。
这是一个想法:
select CYWP, Name, Qty
from t
union all
select CYWP, 'PR2', Qty
from t
where PR2 <> 0;