【问题标题】:Pivot group by SQL query按 SQL 查询透视组
【发布时间】:2022-09-23 20:59:58
【问题描述】:

我有一张表来跟踪邮箱和组。 1 个邮箱将有 3 个不同的组。我想查看所有邮箱和群组每天的连接状态。我创建了以下查询,但它返回多行。我想汇总如下数据。有人可以帮忙吗!

Select cast (CreatedDate as Date), Connected, GroupOrMbx, GroupType 
from [dbo].[Mbx_test]
group by cast (CreatedDate as Date), Connected, GroupOrMbx, GroupType

预期输出:

表格和数据

CREATE TABLE [dbo].[Mbx_test](
    [GroupOrMbx] [varchar](10) NOT NULL,    
    [GroupName] [varchar](255) NULL,
    [GroupEmail] [varchar](255) NULL,
    [GroupType] [varchar](10) NULL,
    [MBXName] [varchar](255) NULL,
    [MBXEmail] [varchar](255) NULL,
    [Connected] [bit] NOT NULL,
    [CreatedDate] [datetime] NOT NULL
) 

INSERT INTO Mbx_test
VALUES 
(\'mbx\', NULL, NULL,NULL,\'mbx1\',\'mbx1@test.com\',1,\'2022-09-22\'),
(\'group\', \'group1\',\'group1@test.com\',\'W\',\'mbx1\',\'mbx1@test.com\',1,\'2022-09-22\'),
(\'group\', \'group2\',\'group2@test.com\',\'M\',\'mbx1\',\'mbx1@test.com\',1,\'2022-09-22\'),
(\'group\', \'group3\',\'group3@test.com\',\'R\',\'mbx1\',\'mbx1@test.com\',1,\'2022-09-22\'),

(\'mbx\', NULL, NULL,NULL,\'mbx2\',\'mbx2@test.com\',1,\'2022-09-22\'),
(\'group\', \'group4\',\'group4@test.com\',\'W\',\'mbx2\',\'mbx2@test.com\',1,\'2022-09-22\'),
(\'group\', \'group5\',\'group5@test.com\',\'M\',\'mbx2\',\'mbx2@test.com\',1,\'2022-09-22\'),
(\'group\', \'group6\',\'group6@test.com\',\'R\',\'mbx2\',\'mbx2@test.com\',1,\'2022-09-22\'),

(\'mbx\', NULL, NULL,NULL,\'mbx3\',\'mbx3@test.com\',0,\'2022-09-22\'),
(\'group\', \'group7\',\'group7@test.com\',\'W\',\'mbx3\',\'mbx3@test.com\',0,\'2022-09-22\'),
(\'group\', \'group8\',\'group8@test.com\',\'M\',\'mbx3\',\'mbx3@test.com\',0,\'2022-09-22\'),
(\'group\', \'group9\',\'group9@test.com\',\'R\',\'mbx3\',\'mbx3@test.com\',0,\'2022-09-22\'),

(\'mbx\', NULL, NULL,NULL,\'mbx4\',\'mbx4@test.com\',0,\'2022-09-22\'),
(\'group\', \'group10\',\'group10@test.com\',\'W\',\'mbx4\',\'mbx4@test.com\',0,\'2022-09-22\'),
(\'group\', \'group11\',\'group11@test.com\',\'M\',\'mbx4\',\'mbx4@test.com\',0,\'2022-09-22\'),
(\'group\', \'group12\',\'group12@test.com\',\'R\',\'mbx4\',\'mbx4@test.com\',0,\'2022-09-22\')

代码保存在这里 https://dbfiddle.uk/WRW7xKeO

  • 我们如何知道如何将每个group 行与mbx 行相关联?请记住,SQL 表没有固有的顺序。我们是按vMBXNameMBXEmail 分组吗?也不清楚其余列的来源。我们有条件地聚合它们吗?依据什么标准?例如:Connected 是如何计算的,基于所有行为 1 或所有行为 0?

标签: sql-server pivot


【解决方案1】:

使用条件聚合的语句将返回预期结果:

SELECT 
   CreatedDate, 
   Connected,
   COUNT(CASE WHEN GroupOrMbx = 'mbx' THEN GroupOrMbx END) AS [Mbx],
   COUNT(CASE WHEN GroupOrMbx = 'group' THEN GroupOrMbx END) AS [Group],
   COUNT(CASE WHEN GroupType = 'W' THEN GroupType END) AS [W],
   COUNT(CASE WHEN GroupType = 'M' THEN GroupType END) AS [M],
   COUNT(CASE WHEN GroupType = 'R' THEN GroupType END) AS [R]
FROM Mbx_test
GROUP BY CreatedDate, Connected

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2021-06-29
    • 2017-02-22
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多