Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Marin_1a Member Откуда: Сообщений: 125 |
Здравствуйте! Есть 6 разных таблиц с одинаковым полем AFFECTED_ITEM Необходимо вывести колонку AFFECTED_ITEM и Count по каждой таблице К примеру AFFECTED_ITEM | Table1 | Table2 | Table3 | Table6 | -------------------------------------------------------------- Item1 | 53 | 45 | 12 | 0 | -------------------------------------------------------------- Item2 | 4 | 13 | 77 | 9 | -------------------------------------------------------------- Item3 | 7 | 0 | 24 | 23 | |
17 апр 17, 08:42 [20406485] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
Marin_1a, возможные варианты: 1) предварительная группировка по каждой таблице + последующее внешнее соединение результатов в единый датасет 2) предварительная группировка по каждой таблице + union all результатов + PIVOT полученного объединения |
17 апр 17, 08:58 [20406506] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
или 6 union + pivot |
||
17 апр 17, 08:59 [20406512] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
alexeyvg, Подсказали сделать так: SELECT t.AFFECTED_ITEM, Table1, Table2, ... FROM ( SELECT DISTINCT AFFECTED_ITEM FROM Table1 UNION SELECT DISTINCT AFFECTED_ITEM FROM Table2 UNION ... ) t LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table1 from Table1 group by AFFECTED_ITEM) as t1 ON t.AFFECTED_ITEM = t1.AFFECTED_ITEM LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table2 from Table2 group by AFFECTED_ITEM) as t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM ... ORDER BY t.AFFECTED_ITEM но теперь не получается добавить @Parameters к примеру WHERE OPEN_TIME between @StartDate and @EndDate + 1 and COMPANY in @Company |
17 апр 17, 12:32 [20407257] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Marin_1a, пишите имена таблиц в указании полей. |
17 апр 17, 12:53 [20407338] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
В каждом JOINе добавляете: LEFT JOIN (select AFFECTED_ITEM, count(AFFECTED_ITEM) as Table2 from Table2 WHERE OPEN_TIME between @StartDate and @EndDate + 1 group by AFFECTED_ITEM) as t2 ON t2.AFFECTED_ITEM = t1.AFFECTED_ITEM PS Конструкция "COMPANY in @Company" выглядит странно. |
||||
17 апр 17, 14:59 [20407890] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20974 |
SELECT DISTINCT ... UNION SELECT DISTINCT ...Дурь... |
17 апр 17, 15:53 [20408054] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Вообще самый оптимальный вариант для такой задачи - UNION ALL + PIVOT SELECT AFFECTED_ITEM, Table1, Table2, ... FROM ( select 'Table1' as Tab, AFFECTED_ITEM, count(*) as AFFECTED_ITEMS from Table1 group by AFFECTED_ITEM union all select 'Table2' as Tab, AFFECTED_ITEM, count(*) as AFFECTED_ITEMS from Table1 group by AFFECTED_ITEM ... ) t PIVOT ( SUM(AFFECTED_ITEMS) FOR Tab IN(Table1, Table2, ...) ) as p PS Условия добавлять в каждый внутренний select |
||
17 апр 17, 16:29 [20408218] Ответить | Цитировать Сообщить модератору |
Klick Member Откуда: Стерлитамак - Москва Сообщений: 1023 |
Marin_1a, Эту задачу матричный отчет в SSRS решает на раз два. У вас же репортинг как раз. Пользуйтесь его возможностями. |
17 апр 17, 20:29 [20408914] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
alexeyvg, Спасибо! Получилось, как требовалось. |
18 апр 17, 07:13 [20409400] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
Тогда в этом случае вторую колонку уже не добавишь? Если мне нужно помимо AFFECTED_ITEM вынести еще один столбец SUBCATEGORY |
||||
18 апр 17, 09:27 [20409669] Ответить | Цитировать Сообщить модератору |
Klick Member Откуда: Стерлитамак - Москва Сообщений: 1023 |
Делайте отчет в SSRS. Это задача для него. Там сможете добавить сколько угодно столбцов. Матричный отчет все умеет сам делать. |
||
18 апр 17, 11:24 [20410067] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
Klick, А если нужно будет построить без него? Совсем никак? |
18 апр 17, 12:00 [20410251] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||
18 апр 17, 17:00 [20411678] Ответить | Цитировать Сообщить модератору |
Klick Member Откуда: Стерлитамак - Москва Сообщений: 1023 |
Ну вот тут коллеги вам ответили. Можете почитать по ссылкам решения. Но репортинг это делает одной левой. Кстати, вы все еще не перешли на хранимки? |
||
19 апр 17, 10:35 [20413455] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
Klick, сделала через Репортинг, он почему то собирает данные со всех SUBCATEGORY и выводит в AFFECTED_ITEM SELECT t.AFFECTED_ITEM, t.SUBCATEGORY, Table2, Table3, Table4 FROM ( SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM [dbo].[INCIDENTSM1] UNION SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM [dbo].[PROBSUMMARYM1] UNION SELECT DISTINCT AFFECTED_ITEM, SUBCATEGORY FROM [dbo].[REQUESTM1] ) t LEFT JOIN (select DISTINCT AFFECTED_ITEM, SUBCATEGORY, count(*) as Table2 from [Group_New_DB].[dbo].[INCIDENTSM1] group by AFFECTED_ITEM, SUBCATEGORY) as t2 ON t.AFFECTED_ITEM = t2.AFFECTED_ITEM AND t.SUBCATEGORY = t2.SUBCATEGORY LEFT JOIN (select DISTINCT AFFECTED_ITEM, SUBCATEGORY,count(*) as Table3 from [Group_New_DB].[dbo].[PROBSUMMARYM1] group by AFFECTED_ITEM, SUBCATEGORY) as t3 ON t.AFFECTED_ITEM = t3.AFFECTED_ITEM AND t.SUBCATEGORY = t3.SUBCATEGORY LEFT JOIN (select DISTINCT AFFECTED_ITEM, SUBCATEGORY,count(*) as Table4 from [Group_New_DB].[dbo].[REQUESTM1] group by AFFECTED_ITEM, SUBCATEGORY) as t4 ON t.AFFECTED_ITEM = t4.AFFECTED_ITEM AND t.SUBCATEGORY = t4.SUBCATEGORY WHERE t.AFFECTED_ITEM IS NOT NULL AND t.SUBCATEGORY IS NOT NULL ORDER BY t.AFFECTED_ITEM, t.SUBCATEGORY К сообщению приложен файл. Размер - 39Kb |
19 апр 17, 12:15 [20413862] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
Klick, что-то репортинг наоборот все объединил... К сообщению приложен файл. Размер - 10Kb |
19 апр 17, 14:14 [20414639] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
Klick, сделала не через Matrix, а Table) Получилось,как хотела) |
19 апр 17, 14:25 [20414711] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |