Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Сергей7777777 Member Откуда: Сообщений: 14 |
Всем привет. Дело такое..... у меня есть 12 таблиц (в каждой есть список продуктов - яблоки, груши, картошка и т.д). Каждая таблица обзывается как Т1, Т2 .....Т12. Суть в чем, необходимо узнать какие из списка продуктов встречаются в 3-х и более таблицах. |
21 мар 18, 13:54 [21274373] Ответить | Цитировать Сообщить модератору |
Сергей7777777 Member Откуда: Сообщений: 14 |
К примеру: яблоки - таблица Т1, Т4, Т7 |
21 мар 18, 13:54 [21274376] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Спросите у того, кто придумал такую структуру данных. |
21 мар 18, 13:55 [21274380] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Структура данных всех таблиц одинакова? Или везде есть уникально поле с артикулом? |
21 мар 18, 13:59 [21274392] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11567 |
объединить через union все таблички и сделать группировочный запрос с having count(*) > 2 |
21 мар 18, 14:00 [21274396] Ответить | Цитировать Сообщить модератору |
Andy_OLAP Member Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион Сообщений: 3151 |
Таки да. 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] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Это будет работать, если структура таблиц одинакова. А у него скорее всего товар разбит по группам с разными аналитическими характеристиками. |
21 мар 18, 14:12 [21274473] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Andy_OLAP Member Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион Сообщений: 3151 |
А какая разница, что за таблицы, если в каждой есть id товара - "у меня есть 12 таблиц (в каждой есть список продуктов - яблоки, груши, картошка и т.д)". |
||
21 мар 18, 14:13 [21274479] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
|
||
21 мар 18, 14:23 [21274523] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11567 |
да какая разгница, это задача ТС всё привести к единому виду в запросе, направление решения ему уже дали |
21 мар 18, 14:24 [21274533] Ответить | Цитировать Сообщить модератору |
Kopelly Member Откуда: Красноярск Сообщений: 289 |
982183, Union будет работать не с исходными таблицами, а с результатами SELECT'ов, у которых количество, тип и порядок полей одинаковые. |
21 мар 18, 14:25 [21274536] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Точно, увидел. |
21 мар 18, 14:36 [21274590] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
что за бредятина, это типа 1 будет несовместимым типом? |
||||
21 мар 18, 14:37 [21274593] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Это был ответ вот этому автору.
|
||
21 мар 18, 15:05 [21274736] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11567 |
это зачем мне это нужно? я это и без вас знаю. |
||||
21 мар 18, 15:13 [21274773] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
А если знаете, зачем предлагаете то, что работать будет только при определенных условиях или допобработаках? |
22 мар 18, 02:53 [21276063] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |