2012-04-10 1 views
0

У меня есть набор записей, которые когда-то были сгруппированы. Мне хотелось бы присвоить категорию, основанную на комбинациях записей в этой группе.Как установить категорию на основе элементов в предложении group-by в Transact-sql?

Интересно, как лучше всего это сделать ... все, что я могу придумать это то, что у меня ниже, но думал, что может быть более умный способ сделать это (с помощью UDF, может быть?)

SELECT * 
, case when productgroup in ('chihuaha','labrador') then 1 else 0 end AS Dog 
, case when productgroup in ('siamese', 'tabby') then 1 else 0 end as Cat 
INTO #tmp_items 
FROM dbo.Items 

SELECT docket 
     , sum(value) 
     , case when sum(Dog) > 0 and sum(Cat) > 0 then 'Dog and Cat' 
       when sum(Dog) > 0 and sum(Cat) = 0 then 'Dog Only' 
       when sum(Dog) = 0 and sum(Cat) > 0 then 'Cat Only' 
      end 
      as Purchase_Type 
FROM #tmp_items 
GROUP BY docket 

ответ

1

простой способ избежать этой температуры таблицы т.д., чтобы выполнить запрос в очень простой CTE:

WITH tmp_items (Docket, Value, Dog, Cat) 
      AS (SELECT Docket , 
         Value , 
         CASE WHEN productgroup IN ('chihuaha', 'labrador') THEN 1 
          ELSE 0 
         END AS Dog , 
         CASE WHEN productgroup IN ('siamese', 'tabby') THEN 1 
          ELSE 0 
         END AS Cat 
       FROM  dbo.Items 
      ) 
    SELECT Docket , 
      SUM(Value) , 
      CASE WHEN SUM(Dog) > 0 AND SUM(Cat) > 0 THEN 'Dog and Cat' 
       WHEN SUM(Dog) > 0 AND SUM(Cat) = 0 THEN 'Dog Only' 
       WHEN SUM(Dog) = 0 AND SUM(Cat) > 0 THEN 'Cat Only' 
      END AS Purchase_Type 
    FROM tmp_items 
    GROUP BY docket 

Может понадобиться некоторые настройки, поскольку вы не предоставили данные схемы &, но все же - факт, что вам прибегать к этому, может указывать на проблему с вашей схемой. Например, мне обычно нравилось видеть еще одну таблицу, которая определяла бы чихуахуа и лабрадора как собак и сиамцев и табби как кошек (почти две новые сущности), а не жестко-кодирующие их в вашем запросе - было бы намного лучше, если бы они были объединены в а затем подсчитал, где не null и т. д.

+0

Этот ответ помог мне написать совокупный выбор с левыми внешними соединениями в таблицы поиска, спасибо! –

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

  • Нет связанных вопросов^_^