Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / межгрупповая проверка количества уникальных групп в sql / 4 сообщений из 4, страница 1 из 1
29.09.2018, 14:40
    #39710299
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
межгрупповая проверка количества уникальных групп в sql
У меня есть таблицы, и я должен синхронизировать их по количеству групп.
т.е.

Заголовок
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
SELECT TOP  [Dt 
,[CustomerName] ,[ItemRelation] ,[ProductName] ,[ReturnCount] ,[DocumentNum] ,[DocumentDate] ,[IsPromo] ,[CustomerType] ,[CalendarYear] FROM [Action].[dbo].[promo_return] чтобы получить уникальные группы, я делаю так SELECT [CustomerName] ,[ItemRelation] ,[DocumentNum] ,[CalendarYear] ,[CustomerType] ,Count(*) as cnt FROM [Action].[dbo].[promo_return] GROUP BY [CustomerName] ,[ItemRelation] ,[DocumentNum] ,[CalendarYear] ,[CustomerType] ==== следующая таблица SELECT [CustomerName] ,[ItemRelation] ,[DocumentNum] ,[CalendarYear] ,[CustomerType] ,[k] ,[m0] ,[x] ,[coef] ,[ActionEffect] ,[ActionSales] ,[SalesBefore] FROM [Action].[dbo].[promo_effect1] количество также считаем Count(*) as cnt and GROUP BY === следующая таблица SELECT [ItemRelation] ,[DocumentNum] ,[CalendarYear] ,[CustomerName] ,[CustomerType] ,[Return] FROM [Action].[dbo].[returneff] количество рассчитывается Count(*) as cnt and GROUP BY и последняя таблица SELECT [Dt] ,[CustomerName] ,[ItemRelation] ,[ProductName] ,[SaleCount] ,[DocumentNum] ,[DocumentDate] ,[IsPromo] ,[CustomerType] ,[CalendarYear] FROM [Action].[dbo].[promo_data] количество групп расчитывается таким же образом Count(*) as cnt and GROUP BY SELECT [CustomerName] ,[ItemRelation] ,[DocumentNum] ,[CalendarYear] ,[CustomerType] ,Count(*) as cnt FROM [Action].[dbo].[promo_data] GROUP BY [CustomerName] ,[ItemRelation] ,[DocumentNum] ,[CalendarYear] ,[CustomerType] все эти таблицы должны иметь одинаковое число групп [CustomerName]+[ItemRelation]+[DocumentNum]+[CalendarYear]+[CustomerType]





предположим, число уникальных групп = 9658 во всех этих таблицах.

Как сделать, чтобы все таблицы были перепроверены друг с другом на количество уникальных групп?

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

что таблицы отличаются от уникальной группы.

я решил пойти легким путем

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
; with cte1 as
(
  SELECT [CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType],Count(*) as cnt
  FROM [Action].[dbo].[promo_return]
  GROUP BY [CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType]
) ,
cte2 as 
(
  SELECT  [CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType],Count(*) as cnt
  FROM [Action].[dbo].[promo_effect1]
  GROUP BY[CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType]
) ,
cte3 as 
(
  SELECT  [CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType],Count(*) as cnt
  FROM [Action].[dbo].[returneff]
  GROUP BY[CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType]
),
cte4 as 
(
  SELECT  [CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType],Count(*) as cnt
  FROM [Action].[dbo].[promo_data]
  GROUP BY[CustomerName],[ItemRelation],[DocumentNum],[CalendarYear],[CustomerType]
)
select a.[CustomerName],a.[ItemRelation],a.[DocumentNum],a.[CalendarYear],a.[CustomerType],
case when a.cnt=b.cnt and a.cnt=c.cnt and a.cnt=d.cnt then  'tables have the same  of unique group'
else 'tables have different of unique group' end 
from cte1 a 
join cte2 b on a.[CustomerName]=b.[CustomerName] and a.[ItemRelation]=b.[ItemRelation] and a.[DocumentNum]=b.[DocumentNum] and a.[CalendarYear]=b.[CalendarYear] and a.[CustomerType]=b.[CustomerType]
join cte3 c on a.[CustomerName]=c.[CustomerName] and a.[ItemRelation]=c.[ItemRelation] and a.[DocumentNum]=c.[DocumentNum] and a.[CalendarYear]=c.[CalendarYear] and a.[CustomerType]=c.[CustomerType]
join cte4 d on a.[CustomerName]=d.[CustomerName] and a.[ItemRelation]=d.[ItemRelation] and a.[DocumentNum]=d.[DocumentNum] and a.[CalendarYear]=d.[CalendarYear] and a.[CustomerType]=d.[CustomerType]



по идеи мне должно вернуться 9658 групп, но
1. мне возвращается 3414
2. все помечены как tables have different of unique group чего не может быть по определению
там точно одинаковое количество групп, ручная проверка.
Более того
не может быть, чтобы было везде 9658 групп, но разных
например в одной таблице 9658 групп и есть группа
1+2+4+5+6
в другой тоже, но там
2+3+4+8+9, но нет 1+2+4+5+6
Количество везде одинаковое и название групп тоже везде одно и тоже

Как мне правильно составить запрос для проверки одинаковости количества групп в этих табличках?
...
Рейтинг: 0 / 0
30.09.2018, 00:19
    #39710418
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
межгрупповая проверка количества уникальных групп в sql
Kontox
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT TOP  [Dt]
      ,[CustomerName]
      ,[ItemRelation]
      ,[ProductName]
      ,[ReturnCount]
      ,[DocumentNum]
      ,[DocumentDate]
      ,[IsPromo]
      ,[CustomerType]
      ,[CalendarYear]
  FROM [Action].[dbo].[promo_return]

чтобы получить уникальные группы, я делаю так

  SELECT [CustomerName]
      ,[ItemRelation]
      ,[DocumentNum]
      ,[CalendarYear]
      ,[CustomerType]
      ,Count(*) as cnt
  FROM [Action].[dbo].[promo_return]


Не понимаю ваших терминов. Что такое "группы"?

Вторым запросом вы получаете количество записей для каждого кастомера (скажем, количество документов, или продуктов, или ещё чего то, что записывается в эту таблицу)

Для других таблиц вы тоже получаете количество записей для каждого кастомера (но записи там другие, ведь таблицы-то разные)

Итоговый запрос показывает, разное или одинаковое, количество записей для каждого кастомера в этих таблицах.
Kontoxпо идеи мне должно вернуться 9658 групп, ноЭээ, вы имеете в виду, запрос должен вернуть 9658 записей?

Ну, в первой таблице 9658 кастомеров, во второй ещё сколько то.

Ваш запрос возвращает столько записей, сколько одинаковых кастомеров во всех этих таблицах.
...
Рейтинг: 0 / 0
30.09.2018, 13:31
    #39710513
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
межгрупповая проверка количества уникальных групп в sql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT TOP  [Dt]
      ,[CustomerName]
      ,[ItemRelation]
      ,[ProductName]
      ,[ReturnCount]
      ,[DocumentNum]
      ,[DocumentDate]
      ,[IsPromo]
      ,[CustomerType]
      ,[CalendarYear]
  FROM [Action].[dbo].[promo_return]
тут  655002 записи

чтобы получить уникальные группы, я делаю так

  SELECT [CustomerName]
      ,[ItemRelation]
      ,[DocumentNum]
      ,[CalendarYear]
      ,[CustomerType]
      ,Count(*) as cnt
  FROM [Action].[dbo].[promo_return]


тут
вот пример групп, уникальных


во всех таблицах этот дистинк групп SELECT [CustomerName]
,[ItemRelation]
,[DocumentNum]
,[CalendarYear]
,[CustomerType]
,Count(*) as cnt

одинаковый

но почему возвращается3414 записи


В идеале я хочу такой формат вывода
...
Рейтинг: 0 / 0
30.09.2018, 13:32
    #39710514
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
межгрупповая проверка количества уникальных групп в sql
в идеале я жду такой формат. Как его добиться ?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / межгрупповая проверка количества уникальных групп в sql / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]