如何根据不同列的数据组合来获取列中不同数据的计数

问题描述 投票:0回答:1

假设我在名为 tbl_decisions 的表中有以下数据:

决定1 决定2 打开 关闭 当前
A A 销售 营销 营销
B C 人力资源 人力资源
D F 营销 营销 人力资源
D F 营销 营销 营销
E B
E B 人力资源

这不是一个详尽的列表,而且我正在处理一个非常大的数据集,因此我们可以假设会有各种方式的决策组合。

一些信息,以便您可以理解数据: 立案并做出两项决定。 “开案”是指案件开案时案件所在的地方。 “结案”是指结案时案件所在的地方。 “当前”是指此时案件当前所在的位置。

对于每个决策组合(A&B、A&B、A&C...F&A、F&B、F&C 等),我试图计算每个部门有多少个案例。

我希望将每个部门的结果分为 3 列(我有 5 个部门)。

因此,使用上面的示例数据并仅考虑“营销”和“IT”部门,我应该得到以下结果:

决定1 决定2 营销_打开 营销_关闭 营销_当前 IT_打开 关闭 IT_剪切
A A 0 1 1 0 0 0
B C 0 0 0 0 1 0
C F 0 0 0 0 0 0
D F 2 2 1 0 0 0
E B 0 0 0 2 1 2
F E 0 0 0 0 0 0

我已完成以下操作:


SELECT
    DECISION1,
    DECISION2,
    (SELECT COUNT (*) FROM TBL_DECISIONS D2 WHERE D2.OPEN = 'Marketing' AND D2.DECISION1 = D1.DECISION1 AND D2.DECISION2 = D1.DECISION2) AS 'Marketing Open',
    (SELECT COUNT (*) FROM TBL_DECISIONS D2 WHERE D2.CLOSE = 'Marketing' AND D2.DECISION1 = D1.DECISION1 AND D2.DECISION2 = D1.DECISION2) AS 'Marketing Close',
    (SELECT COUNT (*) FROM TBL_DECISIONS D2 WHERE D2.OPEN = 'Marketing' AND D2.DECISION1 = D1.DECISION1 AND D2.DECISION2 = D1.DECISION2) AS 'Marketing Close',
    (SELECT COUNT (*) FROM TBL_DECISIONS D2 WHERE D2.OPEN = 'IT' AND D2.DECISION1 = D1.DECISION1 AND D2.DECISION2 = D1.DECISION2) AS 'IT Open',
    (SELECT COUNT (*) FROM TBL_DECISIONS D2 WHERE D2.CLOSE = 'IT' AND D2.DECISION1 = D1.DECISION1 AND D2.DECISION2 = D1.DECISION2) AS 'IT Close',
    (SELECT COUNT (*) FROM TBL_DECISIONS D2 WHERE D2.OPEN = 'IT' AND D2.DECISION1 = D1.DECISION1 AND D2.DECISION2 = D1.DECISION2) AS 'IT Close'
FROM
    TBL_DECISIONS D1
GROUP BY
    DECISION1,
    DECISION2

我知道这不是最好的方法(根本!),而且它有太多不必要的处理能力,但此时我的头脑已经走上了正轨,我不知道还能怎么做它。我似乎无法指出它。我并不是真的想要代码,我只是想知道你会怎么做?我知道有一种更简单的方法可以做到这一点,而且不需要花很多时间来运行。

sql sql-server join count
1个回答
0
投票

Brad 在评论中提供了答案:

您可以在选择中执行 case 语句,例如 SUM(Case when D2.Open = 'Marketing' THEN 1 ELSE 0 END ) 当符合您的条件时,这会给您一个 1,然后您将它们相加。然后,您可以为您想要获取计数的每个金额创建多个 case 语句。 – 布拉德 2 月 9 日 17:55

© www.soinside.com 2019 - 2024. All rights reserved.