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

Откуда:
Сообщений: 8
Всем добрый день!
Есть несколько однотипных таблиц. Например,
Таблица1
Номер месяца Показатель1
1 4
1 5
1 3
2 5
2 5
3 3
3 4

Таблица2
Номер месяца Показатель2
1 5
1 5
2 1
2 2
3 3

Таблица3
Номер месяца Показатель3
1 1
2 2
2 2
3 2
3 5

Нужно создать таблицу, которая включает в себя все три показателя в среднем за месяц, т.е.
Номер месяца средний пок-ль1 средний пок-ль2средний пок-ль3
1 4 5 1
2 5 1,5 2
3 3,5 3 3,5


Какой SQL запрос лучше написать?
18 сен 19, 22:24    [21973694]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
vikkiv
Member

Откуда: London
Сообщений: 2702
Marisolka
Какой SQL запрос лучше написать?

лучше всего будет самый производительный и писать к тому-же нужно правильный.

в общих чертах: сначала сделать словарь/изм. месяцев и к нему уже
цеплять агрегации показателей фунцией AVG(так среднее называется по англ.)
18 сен 19, 22:47    [21973705]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Marisolka
Нужно создать таблицу,
...
Какой SQL запрос лучше написать?
Таблицы создаются SQL запросами "CREATE TABLE"
18 сен 19, 23:33    [21973747]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54167
Marisolka
Какой SQL запрос лучше написать?
select t.m, max(v1), max(v2), max(v3)
from
(
select t.m, avg(t.value) v1, null v2, null v3
  from t1 t
 group by t.m
union allselect t.m, null v1, avg(t.value) v2, null v3
  from t2 t
 group by t.m
union allselect t.m, null v1, null v2, avg(t.value) v3
  from t3 t
 group by t.m
) t
 group by t.m
19 сен 19, 07:15    [21973795]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
Max_Хацкер
Member

Откуда: Челябинск
Сообщений: 154
Например так:
;WITH Months AS ( --список месяцев
SELECT [Номер месяца] FROM Таблица1
UNION
SELECT [Номер месяца] FROM Таблица1
UNION
SELECT [Номер месяца] FROM Таблица1)
SELECT m.[Номер месяца]
      ,AVG(t1.[Показатель1]) AS [СреднийПоказатель1]
      ,AVG(t2.[Показатель1]) AS [СреднийПоказатель2]
      ,AVG(t3.[Показатель1]) AS [СреднийПоказатель3]
FROM Months m
  LEFT OUTER JOIN [Таблица1] t1 ON t1.[Номер месяца] = m.[Номер месяца]
  LEFT OUTER JOIN [Таблица2] t2 ON t2.[Номер месяца] = m.[Номер месяца]
  LEFT OUTER JOIN [Таблица3] t3 ON t3.[Номер месяца] = m.[Номер месяца]
GROUP BY m.[Номер месяца]


Из-за LEFT JOIN-ов надо ещё придумать что с NULL делать, но мне лень. :)
19 сен 19, 07:20    [21973800]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
Marisolka
Member

Откуда:
Сообщений: 8
Написала такой запрос:
SELECT AVG(t1.Показатель11) as cv1, t1.Номер_месяца, AVG(cv2), AVG(cv4)
From Таблица1 t1
left join
(Select t2.Номер_месяца, AVG(t2.Показатель2) as cv2, AVG(cv3) as cv4
from Таблица2 t2
left join
(Select t3.Номер_месяца, AVG(t3.Показатель3) as cv3
from Таблица3 t3
Group by t3.Номер_месяца) t3
on t2.Номер_месяца=t3.Номер_месяца
Group by t2.Номер_месяца) t4
on t4.Номер_месяца=t1.Номер_месяца
Group by t1.Номер_месяца

Просто думаю, может что-то легче есть.....
19 сен 19, 17:58    [21974573]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54167
Marisolka
Написала такой запрос:
SELECT AVG(t1.Показатель11) as cv1, t1.Номер_месяца, AVG(cv2), AVG(cv4)
From Таблица1 t1
left join
(Select t2.Номер_месяца, AVG(t2.Показатель2) as cv2, AVG(cv3) as cv4
from Таблица2 t2
left join
(Select t3.Номер_месяца, AVG(t3.Показатель3) as cv3
from Таблица3 t3
Group by t3.Номер_месяца) t3
on t2.Номер_месяца=t3.Номер_месяца
Group by t2.Номер_месяца) t4
on t4.Номер_месяца=t1.Номер_месяца
Group by t1.Номер_месяца

Просто думаю, может что-то легче есть.....
покрути мой запрос, оцени
19 сен 19, 18:44    [21974624]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
Marisolka
Member

Откуда:
Сообщений: 8
andreymx,
Спасибо!
24 сен 19, 17:55    [21978310]     Ответить | Цитировать Сообщить модератору
 Re: Объединение больше двух таблиц  [new]
Charles Weyland
Member

Откуда: Feorina "Fury" 161
Сообщений: 4339
Объединить все таблицы с помощью UNION ALL, а затем применить конструкцию PIVOT
24 сен 19, 18:49    [21978364]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить