将子查询转置并插入外部查询(SQL,select)

时间:2016-04-20 01:30:14

标签: sql sql-server

通过子查询我试图将值和类别插入外部查询的列中。

这使得它比简单的转置更复杂。 '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列的结果。

1 个答案:

答案 0 :(得分:0)

我认为这是union all。我不知道你的查询与你的问题有什么关系 - 问题提到了一个表,但查询有很多。

这是一个想法:

select CYWP, Name, Qty
from t
union all
select CYWP, 'PR2', Qty
from t
where PR2 <> 0;