T-SQL Self Join与聚合函数结合使用

时间:2010-05-18 18:53:25

标签: tsql

我有下表:

CREATE TABLE [dbo].[Tree](
 [AutoID] [int] IDENTITY(1,1) NOT NULL,
 [Category] [varchar](10) NULL,
 [Condition] [varchar](10) NULL,
 [Description] [varchar](50) NULL,
 CONSTRAINT [PK_Tree] PRIMARY KEY CLUSTERED 
(
 [AutoID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

数据如下所示:

INSERT INTO [Test].[dbo].[Tree]
           ([Category]
           ,[Condition]
           ,[Description])
     VALUES ('1','Alpha','Type 1')
INSERT INTO [Test].[dbo].[Tree]
           ([Category]
           ,[Condition]
           ,[Description])
     VALUES ('1','Alpha','Type 1')
INSERT INTO [Test].[dbo].[Tree]
           ([Category]
           ,[Condition]
           ,[Description])
     VALUES ('2','Alpha','Type 2')
INSERT INTO [Test].[dbo].[Tree]
           ([Category]
           ,[Condition]
           ,[Description])
     VALUES ('2','Alpha','Type 2')
GO

我现在尝试执行以下操作:

SELECT Category,COUNT(*) as CategoryCount FROM Tree where Condition = 'Alpha' group by Category

但是,我也想获得每个元素的描述。我尝试了几个子查询,自连接等,但我总是遇到子查询不能返回多个记录的问题。

问题是由于数据库设计不佳造成的,我无法改变,而且我已经完成了如何在单个查询中完成此操作的想法。

1 个答案:

答案 0 :(得分:3)

如果您需要说明,则必须将其包含在汇总

SELECT  Category ,
        [Description] ,
        COUNT(*) AS CategoryCount
FROM    Tree
WHERE   Condition = 'Alpha'
GROUP BY Category ,
        [Description]