使用 CTE 为产品计数单独列

Posted

技术标签:

【中文标题】使用 CTE 为产品计数单独列【英文标题】:Separate columns for product counts using CTEs 【发布时间】:2021-11-11 15:31:40 【问题描述】:

由于我的帖子不符合社区规则,再次提出问题。

我首先尝试编写 PIVOT 语句来获得所需的输出。不过,我现在正尝试使用 CTE 来解决这个问题。

这是原始数据。我们就叫它ProductMaster

PRODUCT_NUM CO_CD PROD_CD MASTER_ID Date ROW_NUM
1854 MAWC STATIONERY 10003493039 1/1/2021 1
1567 PREF PRINTER 10003493039 2/1/2021 2
2151 MAWC STATIONERY 10003497290 3/2/2021 1

我需要在单独的列中,Printer_CT,Stationery_Ct 中的这些数据中为每个家庭提供每种产品的计数

每个 Master_ID 代表一个家庭。一个家庭可以拥有多种产品。

所以每个家庭在我的最终输出中代表一行,我需要将产品计数放在不同的列中。每个家庭可以有多个产品,4个甚至更多。但我已经简化了这个例子。

我正在编写一个带有 CTE 的查询,以提供我想要的输出。在我的输出中,每一行都按主 ID 分组

ORGL_CO_CD ORGL_PROD_CD STATIONERY_CT PRINTER_CT
MAWC STATIONERY 1 1
MAWC STATIONERY 1 0

这是我的问题。我不确定在哪里介绍“Stationery_Ct”列

WITH CTE AS
(
    SELECT
        CO_CD, Prod_CD, MASTER_ID,
        '' as S1_CT, '' as P1_CT 
    FROM
        ProductMaster
    WHERE
        ROW_NUM = 1
), CTE_2 AS
(
    SELECT Prod_CD, MASTER_ID
    FROM ProductMaster
    WHERE ROW_NUM = 2
)
SELECT 
    CO_CD AS ORGL_CO_CD, 
    c.Prod_CD AS ORGL_PROD_CD,  
    (CASE WHEN c2.Prod_CD = ‘PRINTER’ THEN P1_CT = 1 END) PRINTER_CT
FROM 
    CTE AS c
LEFT OUTER JOIN 
    CTE_2 AS c2 ON c.MASTER_ID = c2.MASTER_ID

任何指针将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

我猜你可以使用GROUP BYSUM 来解决这个问题:

-- Test data
DECLARE @ProductMaster AS TABLE (PRODUCT_NUM INT, CO_CD VARCHAR(30), PROD_CD VARCHAR(30), MASTER_ID BIGINT)
INSERT @ProductMaster VALUES (1854, 'MAWC', 'STATIONERY', 10003493039)
INSERT @ProductMaster VALUES (1567, 'PREF', 'PRINTER', 10003493039)
INSERT @ProductMaster VALUES (2151, 'MAWC', 'STATIONERY', 10003497290)

SELECT
    MASTER_ID,
    SUM(CASE PROD_CD WHEN 'STATIONERY' THEN 1 ELSE 0 END) AS STATIONERY_CT,
    SUM(CASE PROD_CD WHEN 'PRINTER' THEN 1 ELSE 0 END) AS PRINTER_CT
FROM @ProductMaster
GROUP BY MASTER_ID

结果是:

MASTER_ID STATIONERY_CT PRINTER_CT
10003493039 1 1
10003497290 1 0

【讨论】:

以上是关于使用 CTE 为产品计数单独列的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询以获取列中每个元素的计数

如何以最佳方式按两列进行 GROUP BY 和计数?

产品在设置为单独不可见时仍然显示

将库存数据与产品数据保存在单独的表中

官方:金蝶实际成本在制品材料分配详解

有没有办法在不为类别制作不同的分页组件的情况下根据特定类别对产品进行计数?