2010-05-18 3 views
0

У меня есть следующая таблица:T-SQL автообъединение в сочетании с агрегатной функцией

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 

Однако я также хочу получить описание для каждого элемента. Я пробовал несколько подзапросов, сам присоединяюсь и т. Д., Но я всегда сталкиваюсь с проблемой, что подзапрос не может вернуть более одной записи.

Проблема связана с плохим дизайном базы данных, который я не могу изменить, и у меня закончились идеи относительно того, как это сделать в одном запросе.

+0

Можете ли вы привести пример того, что результирующий набор должен выглядеть? Я немного смущен необходимостью также вытаскивать описание. Похоже, вы пытаетесь объединить слишком много разных вещей в один запрос. – NotMe

+0

Категория = 1, CategoryCount = 2, Описание = Тип 1; Категория = 2, КатегорияCount = 2, Описание = Тип 2; – NickD

+0

Этот набор результирующих результатов, похоже, не соответствует приведенным выше образцам. Что такое предложение 1 и предложение 3? – NYSystemsAnalyst

ответ

3

Если вам нужно описание, вы должны включить его в агрегированном

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

спасибо. я думаю, я сделал вещи слишком сложными :-) – NickD

Смежные вопросы