Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Срочно  [new]
Сергей7777777
Member

Откуда:
Сообщений: 14
Всем привет. Дело такое..... у меня есть 12 таблиц (в каждой есть список продуктов - яблоки, груши, картошка и т.д). Каждая таблица обзывается как Т1, Т2 .....Т12. Суть в чем, необходимо узнать какие из списка продуктов встречаются в 3-х и более таблицах.
21 мар 18, 13:54    [21274373]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Сергей7777777
Member

Откуда:
Сообщений: 14
К примеру: яблоки - таблица Т1, Т4, Т7
21 мар 18, 13:54    [21274376]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36970
Спросите у того, кто придумал такую структуру данных.
21 мар 18, 13:55    [21274380]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Структура данных всех таблиц одинакова?
Или везде есть уникально поле с артикулом?
21 мар 18, 13:59    [21274392]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
объединить через union все таблички и сделать группировочный запрос с having count(*) > 2
21 мар 18, 14:00    [21274396]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Сергей7777777
Всем привет. Дело такое..... у меня есть 12 таблиц (в каждой есть список продуктов - яблоки, груши, картошка и т.д). Каждая таблица обзывается как Т1, Т2 .....Т12. Суть в чем, необходимо узнать какие из списка продуктов встречаются в 3-х и более таблицах.

Таки да.
select tt.tovar_id,sum(tt.count1) as [Количество_таблиц_с_товаром]
from
(
select 1 as count1, tovar_id as tovar_id from T1 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T2 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T3 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T4 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T5 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T6 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T7 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T8 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T9 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T10 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T11 group by tovar_id
union all
select 1 as count1, tovar_id as tovar_id from T12 group by tovar_id
) tt group by tt.tovar_id
-- или так
--having count(*)>=3
-- и так тоже кошерно
having sum(tt.count1)>=3
21 мар 18, 14:00    [21274399]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Это будет работать, если структура таблиц одинакова.
А у него скорее всего товар разбит по группам с разными аналитическими характеристиками.
21 мар 18, 14:12    [21274473]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
Сергей7777777,

With All_Tables as
(
select 'T1'  as TableName, tovar_id, tovar_name from T1
union all
select 'T2'  as TableName, tovar_id, tovar_name from T2
union all
select 'T3'  as TableName, tovar_id, tovar_name from T3
union all
select 'T4'  as TableName, tovar_id, tovar_name from T4
union all
select 'T5'  as TableName, tovar_id, tovar_name from T5
union all
select 'T6'  as TableName, tovar_id, tovar_name from T6
union all
select 'T7'  as TableName, tovar_id, tovar_name from T7
union all
select 'T8'  as TableName, tovar_id, tovar_name from T8
union all
select 'T9'  as TableName, tovar_id, tovar_name from T9
union all
select 'T10' as TableName, tovar_id, tovar_name from T10
union all
select 'T11' as TableName, tovar_id, tovar_name from T11
union all
select 'T12' as TableName, tovar_id, tovar_name from T12
)
Select tovar_id, tovar_name,
 stuff((Select distinct ', '+ TableName From All_Tables b Where a.tovar_id = b.tovar_id and a.tovar_name = b.tovar_name For XML path('')),1,2,'')
 From All_Tables a
Group by a.tovar_id, a.tovar_name
Having count(distinct TableName)>=3
21 мар 18, 14:13    [21274476]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
982183
Это будет работать, если структура таблиц одинакова.
А у него скорее всего товар разбит по группам с разными аналитическими характеристиками.

А какая разница, что за таблицы, если в каждой есть id товара - "у меня есть 12 таблиц (в каждой есть список продуктов - яблоки, груши, картошка и т.д)".
21 мар 18, 14:13    [21274479]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
982183
Member

Откуда: VL
Сообщений: 3352
автор
Topic Status: Some information in this topic is pre-release and subject to change in future releases. Pre-release information describes new features or changes to existing features in Microsoft SQL Server 2014.
Combines the results of two or more queries into a single result set that includes all the rows that belong to all queries in the union. The UNION operation is different from using joins that combine columns from two tables.
The following are basic rules for combining the result sets of two queries by using UNION:
• The number and the order of the columns must be the same in all queries.
• The data types must be compatible.
21 мар 18, 14:23    [21274523]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
да какая разгница, это задача ТС всё привести к единому виду в запросе, направление решения ему уже дали
21 мар 18, 14:24    [21274533]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
982183,

Union будет работать не с исходными таблицами, а с результатами SELECT'ов, у которых количество, тип и порядок полей одинаковые.
21 мар 18, 14:25    [21274536]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Точно, увидел.
21 мар 18, 14:36    [21274590]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
982183
автор
Topic Status: Some information in this topic is pre-release and subject to change in future releases. Pre-release information describes new features or changes to existing features in Microsoft SQL Server 2014.
Combines the results of two or more queries into a single result set that includes all the rows that belong to all queries in the union. The UNION operation is different from using joins that combine columns from two tables.
The following are basic rules for combining the result sets of two queries by using UNION:
• The number and the order of the columns must be the same in all queries.
• The data types must be compatible.

что за бредятина, это типа 1 будет несовместимым типом?
21 мар 18, 14:37    [21274593]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Это был ответ вот этому автору.

Konst_One
объединить через union все таблички и сделать группировочный запрос с having count(*) > 2
21 мар 18, 15:05    [21274736]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
982183
Это был ответ вот этому автору.

Konst_One
объединить через union все таблички и сделать группировочный запрос с having count(*) > 2


это зачем мне это нужно? я это и без вас знаю.
21 мар 18, 15:13    [21274773]     Ответить | Цитировать Сообщить модератору
 Re: Срочно  [new]
982183
Member

Откуда: VL
Сообщений: 3352
А если знаете, зачем предлагаете то, что работать будет только при определенных условиях или допобработаках?
22 мар 18, 02:53    [21276063]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить