Выберите и сгруппируйте по полям, принудительно сгруппировав, но затем не сгруппировав должным образом - PullRequest
0 голосов
/ 24 февраля 2020

Я работал с этим запросом, но я не могу понять, почему неправильно группирует (показывает только комбинации компании и почтового индекса. Но заставляет меня группировать по электронной почте, как я могу сделать это, группируя по только компания и почтовый индекс?

 SELECT DISTINCT(o.Company), 
       o.Zip, 
       o.Email,
       --RIGHT(Email, LEN(Email) - CHARINDEX('@', email)) AS Domain, 
       cv.EmailDomain, 
       COUNT(o.OrderNumber) AS ordernumber, 
       YEAR(o.OrderDate) AS TheYear, 
       FORMAT(cv.DateVisited, 'MM-yyyy') AS [DateVisited], 
       cv.MeetingType
FROM dbo.CustomerVisits cv
     JOIN dbo.Orders o ON o.Zip = cv.Zip
WHERE(RIGHT(o.Email, LEN(o.Email) - CHARINDEX('@', o.email))) = cv.EmailDomain
GROUP BY o.Zip, 
         o.Email, 
         o.Company, 
         cv.EmailDomain, 
         o.OrderDate, 
         FORMAT(cv.DateVisited, 'MM-yyyy'), 
         cv.MeetingType;

сейчас дает это как результат:

enter image description here

и дает более 260 строк, когда В таблице «customervisits» есть только 30+ строк, которые я пытался уменьшить в полях выбора, но мне нужно, чтобы они были в состоянии фильтровать и поворачивать позже (плюс мне нужно сделать некоторые манипуляции с кадром выбора)

1 Ответ

1 голос
/ 24 февраля 2020

Если вы группируете по компании и почтовому индексу, ваши данные не позволят дублировать на этом уровне. Если у вас все в порядке с использованием любого электронного письма для компании и почтового индекса, то:

 SELECT o.Company, 
       o.Zip, 
       max(o.Email) as Email,
       max(cv.EmailDomain) as EmailDomain, 
       COUNT(o.OrderNumber) AS ordernumber, 
       YEAR(max(o.OrderDate)) AS TheYear, 
       FORMAT(max(cv.DateVisited), 'MM-yyyy') AS [DateVisited], 
       max(cv.MeetingType) as MeetingType
FROM dbo.CustomerVisits cv
     JOIN dbo.Orders o ON o.Zip = cv.Zip
WHERE(RIGHT(o.Email, LEN(o.Email) - CHARINDEX('@', o.email))) = cv.EmailDomain
GROUP BY o.Zip, 
         o.Company

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...