【问题标题】:One column data into multiple column一列数据分成多列
【发布时间】:2020-01-20 08:48:48
【问题描述】:

我正在使用 SQL Server,我想根据每一列中的posid 数据这里是我的代码:

select ItcodedGrp,ItheadCat, ItheadCls,ItheadGrp,POsid,
(sum(OpnQty) + sum(FaultyQty) + sum(UsedQty) +  sum(RecQty) - sum(RejectQty)  - sum(Issued) + 
sum(DebitQty) + sum(AdjQty) + sum(STNQtyPls) - sum(STNQtyMin) - sum(POSQTY) - sum(TransitQty) - sum(FQtyMin)
+ sum(FQtyPlus) + sum(ReplaceQty)) as AllStock
from Vmgt_RSales_Stock
where POsid in   (2,6,7,10,11,12,13,14) and ItcodedGrp  like '28.01.059.%'
group by ItcodedGrp,ItheadCat, ItheadCls,ItheadGrp,POsid 
order by POsid asc

这是我的结果。

我要每栏按照posid的股票

如您在上图中所见,我的股票显示在 posid 前面,但我想要列中的所有股票,但 posid 明智的做法是让我举个例子,我的结果应该如下所示

【问题讨论】:

    标签: sql sql-server tsql pivot


    【解决方案1】:

    您可以使用条件聚合。您的 sum() 表达式很长,所以我会添加一级聚合以避免重复多次:

    select
        ItcodedGrp,
        ItheadCat, 
        ItheadCls,
        ItheadGrp,
        sum(AllStock) AllStock,
        sum(case when POSid = 2  then AllStock end) POSid2,
        sum(case when POSid = 6  then AllStock end) POSid6,
        sum(case when POSid = 7  then AllStock end) POSid7,
        sum(case when POSid = 10 then AllStock end) POSid10,
        sum(case when POSid = 11 then AllStock end) POSid11,
        sum(case when POSid = 12 then AllStock end) POSid12,
        sum(case when POSid = 13 then AllStock end) POSid13,
        sum(case when POSid = 14 then AllStock end) POSid14
    from (
        select 
            ItcodedGrp,
            ItheadCat, 
            ItheadCls,
            ItheadGrp,
            POsid,
            (
                sum(OpnQty) 
                + sum(FaultyQty) 
                + sum(UsedQty) 
                +  sum(RecQty) 
                - sum(RejectQty)  
                - sum(Issued) 
                + sum(DebitQty) 
                + sum(AdjQty) 
                + sum(STNQtyPls) 
                - sum(STNQtyMin) 
                - sum(POSQTY) 
                - sum(TransitQty) 
                - sum(FQtyMin)
                + sum(FQtyPlus) 
                + sum(ReplaceQty)
            ) as AllStock
        from Vmgt_RSales_Stock
        where 
            POsid in (2,6,7,10,11,12,13,14) 
            and ItcodedGrp  like '28.01.059.%'
        group by 
            ItcodedGrp,
            ItheadCat, 
            ItheadCls,
            ItheadGrp,
            POsid 
        ) t
    group by 
        tcodedGrp,
        ItheadCat, 
        ItheadCls,
        ItheadGrp
    

    【讨论】:

    • 天哪,它解决了我的问题,非常感谢亲爱的 GMB !!!
    • @MakhdoomLiaqat 如果可以解决您的问题,请点击问题旁边的“接受”复选标记。
    • @MakhdoomLiaqat 是的,接受答案是对帮助的唯一回报。
    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2016-12-11
    • 2017-03-18
    相关资源
    最近更新 更多