SQL: как отсортировать значения по категориям в ssms - PullRequest
0 голосов
/ 13 июня 2018

я создаю запрос

SELECT Dt, CustomerName, ItemRelation, SaleCount, 
              DocumentNum, DocumentYear, IsPromo, CustomerType
              FROM [dbo].[promo_data]  where [CustomerType]='XY'

есть данные о запасе [IsPromo] (0 - нет акции, 1 - акции), как я могу выбрать только эти объекты XY типа CustomerType, которые имеют только одинзначение 1 для категории действия = 1

простой пример

[ItemRelation]  [SaleCount] IsPromo ,[DocumentNum]  [DocumentYear]
11203   8,85947691  0   138 2018
11203   9,450108704 0   138 2018
11203   12,40326767 1   138 2018
11202   8,85947691  0   137 2018
11202   9,450108704 0   137 2018
11202   12,40326767 1   137 2018
11202   25,98779894 1   137 2018
11202   63,19760196 1   137 2018

я должен выбрать

11203       1   138 2018

, потому что

11202       137 2018

имеет два

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Исходя из ответа Гордона, если вы хотите выбрать дополнительные поля, не используемые в группировке, вы можете выполнить самостоятельное объединение с подзапросом, например:

SELECT pd.Dt, pd.CustomerName, pd.ItemRelation, pd.SaleCount, 
              pd.DocumentNum, pd.DocumentYear, pd.IsPromo, pd.CustomerType 
FROM [dbo].[promo_data] pd
INNER JOIN(
  SELECT ItemRelation, DocumentNum, DocumentYear, IsPromo
  FROM [dbo].[promo_data]
  WHERE CustomerType = 'XY' AND IsPromo = 1
  GROUP BY ItemRelation, DocumentNum, DocumentYear, IsPromo
  HAVING COUNT(*) = 1
) grouped
ON pd.ItemRelation = grouped.ItemRelation
AND pd.DocumentNum = grouped.DocumentNum
AND pd.DocumentYear = grouped.DocumentYear
AND pd.IsPromo = grouped.IsPromo
0 голосов
/ 13 июня 2018

Вы, кажется, хотите:

SELECT ItemRelation, DocumentNum, DocumentYear, IsPromo
FROM [dbo].[promo_data]
WHERE CustomerType = 'XY' AND IsPromo = 1
GROUP BY ItemRelation, DocumentNum, DocumentYear, IsPromo
HAVING COUNT(*) = 1;

РЕДАКТИРОВАТЬ:

Чтобы получить все столбцы, используйте функции окна:

SELECT *
FROM (SELECT pd.*,
             COUNT(*) OVER (PARTITION BY ItemRelation, DocumentNum, DocumentYear, IsPromo) as cnt
      FROM [dbo].[promo_data] pd
      WHERE CustomerType = 'XY' AND IsPromo = 1
     ) pd
WHERE cnt = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...