Sql按两个字段分组

Sql按两个字段分组,sql,pivot,Sql,Pivot,我有两个表客户和客户状态入口: CustomerStatusEntries --------------------------- Id | Branch | CustomerStatus_Value | Customer_Id CustomerStatus_Value = ("B" = "Block" , "E" = "Created" etc...) 我需要得到这个输出 SELECT Branch AS 'Branch Code', SUM(CASE WHEN Customer

我有两个表
客户
客户状态入口

CustomerStatusEntries
---------------------------
Id | Branch | CustomerStatus_Value | Customer_Id

CustomerStatus_Value  = ("B" = "Block" , "E" = "Created" etc...)
我需要得到这个输出

SELECT Branch AS 'Branch Code',
    SUM(CASE WHEN CustomerStatus_Value = 'E' THEN 1 ELSE 0 END) AS 'Created',
    SUM(CASE WHEN CustomerStatus_Value = 'A' THEN 1 ELSE 0 END) AS 'Active',
    SUM(CASE WHEN CustomerStatus_Value = 'B' THEN 1 ELSE 0 END) AS 'Blocked',
    SUM(CASE WHEN CustomerStatus_Value = 'C' THEN 1 ELSE 0 END) AS 'Cancelled',
    COUNT(CustomerStatus_Value) AS 'All'
FROM CustomerStatusEntries
GROUP BY Id

假设示例中显示的列数固定,可以执行以下操作:

SELECT Branch, 
       SUM(CASE WHEN CustomerStatus_Value = 'E' THEN 1 ELSE 0 END) AS Created,
       SUM(CASE WHEN CustomerStatus_Value = 'A' THEN 1 ELSE 0 END) AS Active,
       SUM(CASE WHEN CustomerStatus_Value = 'B' THEN 1 ELSE 0 END) AS Blocked,
       SUM(CASE WHEN CustomerStatus_Value = 'C' THEN 1 ELSE 0 END) AS Cancelled,
       COUNT(*) AS All
    FROM CustomerStatusEntries
    GROUP BY Branch;

假设示例中显示的列数是固定的,则可以执行以下操作:

SELECT Branch, 
       SUM(CASE WHEN CustomerStatus_Value = 'E' THEN 1 ELSE 0 END) AS Created,
       SUM(CASE WHEN CustomerStatus_Value = 'A' THEN 1 ELSE 0 END) AS Active,
       SUM(CASE WHEN CustomerStatus_Value = 'B' THEN 1 ELSE 0 END) AS Blocked,
       SUM(CASE WHEN CustomerStatus_Value = 'C' THEN 1 ELSE 0 END) AS Cancelled,
       COUNT(*) AS All
    FROM CustomerStatusEntries
    GROUP BY Branch;

您可以使用标准SQL执行此操作:

select branch_code,
       sum(case when CustomerStatus_Value = 'E' then 1 else 0 end) as Created,
       sum(case when CustomerStatus_Value = 'B' then 1 else 0 end) as Blocked,
       ...
from t
group by branch_code
order by 1

您可以使用标准SQL执行此操作:

select branch_code,
       sum(case when CustomerStatus_Value = 'E' then 1 else 0 end) as Created,
       sum(case when CustomerStatus_Value = 'B' then 1 else 0 end) as Blocked,
       ...
from t
group by branch_code
order by 1

什么是RDBMS?请发布表格结构和示例数据,这将有助于获得一些答案,而不是你需要的大量-1。如果你透露你使用的是哪种SQL,有人可能会告诉你如何使用。或者你可以使用SQL Server搜索。我已说明用户需要帮助我的字段。。。我认为可以很容易地得出这样的结论:customer表有一个id,它是主键,是RDBMS吗?请发布表格结构和示例数据,这将有助于获得一些答案,而不是你需要的大量-1。如果你透露你使用的是哪种SQL,有人可能会告诉你如何使用。或者你可以使用SQL Server搜索。我已说明用户需要帮助我的字段。。。我认为可以很容易地得出这样的结论:customer表有一个id,它是主键…+1,但仍然缺少
Total
行,而且似乎
id
不存在,
Branch
别名是
Branch code
+1,但仍然缺少
Total
行,此外,还可以看到
Id
不存在,而
分支机构
别名为
分支机构代码