【问题标题】:SQL Server 2005 pivot query helpSQL Server 2005 数据透视查询帮助
【发布时间】:2023-12-16 11:57:01
【问题描述】:

我第一次尝试 SQL Server 2005 中的数据透视函数,结果遇到了我想要的结果集。

我有两张桌子defectsemployees。我试图在我的employee 表中获取员工的所有缺陷,并且我不关心分配给在我的员工表中输入的那些之外的人的任何缺陷(我正在考虑加入它,我没有尝试了子查询,但我认为我不需要)

我想获得按(透视)defects.severity 字段分组的结果。我想要的结果集中的字段是:severity, assigned to, employee.name, fix data

基本上我想根据严重性汇总数据并根据缺陷的严重性级别显示计数

这是我的桌子:

CREATE TABLE [dbo].[Employees]
(
    [EmployeeId] [int] NOT NULL,
    [ManagerId] [int] NULL,
    [NTID] [nvarchar](50) NOT NULL,
    [FirstName] [nvarchar](50) NOT NULL,
    [LastName] [nvarchar](50) NOT NULL,
    [FullName] [nvarchar](100) NOT NULL,
    [ReportingGroup] [nchar](10) NOT NULL,
    [Added] [datetime] NOT NULL,
    [LastUpdate] [datetime] NOT NULL,
    [UpdateBy] [nvarchar](50) NOT NULL
)

CREATE TABLE [dbo].[defects]
(
    [Defect ID] [float] NULL,
    [SubSystem] [nvarchar](255) NULL,
    [Status] [nvarchar](255) NULL,
    [Severity] [nvarchar](255) NULL,
    [FixDate] [nvarchar](255) NULL,
    [Assigned To] [nvarchar](255) NULL,
    [Summary] [nvarchar](255) NULL,
    [Product List] [nvarchar](255) NULL,
    [Development Type] [nvarchar](255) NULL,
    [Defect Category] [nvarchar](255) NULL,
    [Defect Cause] [nvarchar](255) NULL,
    [Est Ready for Retest] [nvarchar](255) NULL,
    [Fix Stage] [nvarchar](255) NULL,
    [Planned Fix in Deployment Event] [nvarchar](255) NULL,
    [Planned Fix in Event Mgmt Group] [nvarchar](255) NULL,
    [Est Fixed Date] [nvarchar](255) NULL,
    [Other Owner] [nvarchar](255) NULL
)

【问题讨论】:

  • [Defect ID] [float] NULL 似乎不是该表的主键(我认为应该是)的最佳选择.....为什么 float? ?为什么是 NULL ?为什么字段名称中有空格???我更喜欢[DefectID] INT NOT NULL IDENTITY(1,1) 在所有情况下...
  • 您想在 Severity 上查看您的结果吗? (因为严重性的不同值应该是结果集中的不同列),还是您想简单地按严重性分组?另外,我没有看到 [Fix data] 列,只有 [FixDate]
  • 抱歉,但当我看到您的列名中嵌入了空格时,我就想“我没有办法解决这个问题”。
  • col 名称中的空格很麻烦,我只是使用 [col name] 来处理它。 (这就是我获取数据转储的方式)@ marc_s 为什么我需要主键?我只是按业务严重性字段和列表总数分组。

标签: sql-server-2005 pivot


【解决方案1】:

我用这个 SQL 得到了它:

select [Assigned To], [1-Urgent],[2-High],[3-Medium],[4-Low]
from (select [assigned to],[Business Severity] from defects where [assigned to] is not null) D
pivot
(count([Business Severity]) for [Business Severity] in ([1-Urgent],[2-High],[3-Medium],[4-Low])) V

谢谢大家

【讨论】:

  • 您应该将此标记为已接受的答案,以便将来的访问者知道这已解决。