【问题标题】:How to pivot values into two columns using a CASE statement如何使用 CASE 语句将值转换为两列
【发布时间】:2020-03-03 13:49:00
【问题描述】:

我正在尝试获取两个新列(在本例中为库存类型)及其各自的数量。我曾尝试使用 PIVOT,但它在 SQL 中似乎相当有限。

尝试使用 PIVOT

这是一个更大查询的一部分,但这是我希望以两列形式返回的部分——一列用于库存类型“A”,另一列用于“”——空白。就像现在这样,它返回两行 - 一种用于每种股票类型。

SELECT MATERIAL,
    CASE
        WHEN STOCK_TYPE = 'A'
        THEN 'UNCOVERED QTY'
        ELSE 'BLANK QTY'
    END AS [STOCK TYPE], 
    SUM(QUANTITY) AS 'QUANITTY' 

FROM VW_MRP_ALLOCATION 

WHERE STOCK_TYPE IN ('A','')

AND MATERIAL = '011040'

GROUP BY STOCK_TYPE,
         MATERIAL

这会返回:

MATERIAL           STOCK TYPE    QUANITTY
------------------ ------------- ---------------------------------------
011040             BLANK QTY     67
011040             UNCOVERED QTY 1301

(2 rows affected)



我想为包含两列的材料返回一行 - 一列用于“未覆盖数量”,另一列用于“空白数量”。

【问题讨论】:

    标签: sql sql-server pivot


    【解决方案1】:

    只使用条件聚合:

    SELECT MATERIAL,
           SUM(CASE WHEN STOCK_TYPE = 'A' THEN QUANTITY END) as uncovered_qty,
           SUM(CASE WHEN STOCK_TYPE <> 'A' THEN QUANTITY END) as blank_qty
    FROM VW_MRP_ALLOCATION 
    WHERE STOCK_TYPE IN ('A', '') AND MATERIAL = '011040'
    GROUP BY MATERIAL;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2019-03-04
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      相关资源
      最近更新 更多