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

Откуда:
Сообщений: 17
Доброе утро!
Есть две таблицы
ARHIV_1 поля [id, si, Name, Model, Dat, W, A, V, Y, S, Sl, MSDS]
и
ARHIV_2 поля [id, si, Name, Model, Dat, W, A, V, Y, S, Sl, MSDS]
задача состоит в том что бы объединить две таблицы по полям [id, si,Dat], а так же вычислить среднее по колонкам[W, A, V, Y, S, Sl]
на данный момент есть набросок..
SELECT
AVG(W) AS Avg_W,
AVG(A) AS Avg_A,
AVG(V) AS Avg_V,
AVG(Y) AS Avg_Y,
AVG(S) AS Avg_S,
AVG(Sl) AS Avg_Sulf
FROM
(SELECT top 100 id, si, Name, Model, Dat, W, A, V, Y, S, Sl, MSDS FROM ARCHIV_1
WHERE
Name= 'АО' AND
Model='КС' AND
Dat ='2013-01-29' AND
id= '1'
GROUP BY id, si, Name, Model, Dat, W, A, V, Y, S, Sl, MSDS
) AS Q1

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

К сообщению приложен файл. Размер - 15Kb
5 фев 13, 06:48    [13875422]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
Добрый Э - Эх
Guest
делаешь такой же набросок для второй таблицы, результат набросков соединяешь по нужным полям. Округление делаешь либо на клиенте
5 фев 13, 06:56    [13875424]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
haungan
Member

Откуда:
Сообщений: 17
Добрый Э - Эх
делаешь такой же набросок для второй таблицы, результат набросков соединяешь по нужным полям. Округление делаешь либо на клиенте

то же самое я и для второй могу сделать, а вот сама изюминка так сказать - как же объединить два наброска?
5 фев 13, 07:17    [13875434]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
может так?
select
   id, si, ...,
   round(avg(...),3) as ...
from (
   select ... from tab1
   union all
   select ... from tab2 -- те же количество, тип и порядок полей что и в tab1
) as als
group by id, si, ...
5 фев 13, 07:32    [13875450]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
haungan
Member

Откуда:
Сообщений: 17
Cygapb-007
может так?
select
   id, si, ...,
   round(avg(...),3) as ...
from (
   select ... from tab1
   union all
   select ... from tab2 -- те же количество, тип и порядок полей что и в tab1
) as als
group by id, si, ...

Спасибо со знаками после запятой- решено.
А можно как бы сделать не в столбик данные из двух таблиц а в строку..
Результат запроса с таблицы ARHIV_1 и далее результат запроса с таблицы ARHIV_2
from (
   select ... from tab1
   union all
   select ... from tab2 -- те же количество, тип и порядок полей что и в tab1
) as als

вот еще вопрос - где здесь можно вставить запрос
WHERE
Name= 'АО' AND
Model='КС' AND
Dat ='2013-01-29' AND
id= '1'

что бы он работал по двум таблицам сразу
5 фев 13, 08:05    [13875486]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
Гость333
Member

Откуда:
Сообщений: 3683
haungan,

В вашем наброске запроса указание "top 100" имеет какое-то значение, или его надо убрать?
Если убрать, то я вашу задачу понял так:
SELECT *
FROM
(
    SELECT
        ROUND(AVG(W), 3) AS Avg_W,
        ROUND(AVG(A), 3) AS Avg_A,
        ROUND(AVG(V), 3) AS Avg_V,
        ROUND(AVG(Y), 3) AS Avg_Y,
        ROUND(AVG(S), 3) AS Avg_S,
        ROUND(AVG(Sl), 3) AS Avg_Sulf
    FROM ARCHIV_1
    WHERE Name = 'АО' AND Model='КС' AND Dat ='2013-01-29' AND id = '1'
) x
CROSS JOIN
(
    SELECT
        ROUND(AVG(W), 3) AS Avg_W_2,
        ROUND(AVG(A), 3) AS Avg_A_2,
        ROUND(AVG(V), 3) AS Avg_V_2,
        ROUND(AVG(Y), 3) AS Avg_Y_2,
        ROUND(AVG(S), 3) AS Avg_S_2,
        ROUND(AVG(Sl), 3) AS Avg_Sulf_2
    FROM ARCHIV_2
    WHERE Name = 'АО' AND Model='КС' AND Dat ='2013-01-29' AND id = '1'
) y
5 фев 13, 09:33    [13875700]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
haungan
Member

Откуда:
Сообщений: 17
Гость333
Да, действительно прошу прощения. На самом деле top 100 здесь не нужен.
Это именно то что нужно. Спасибо всем за участие..
5 фев 13, 10:38    [13875979]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
haungan
Member

Откуда:
Сообщений: 17
Доброе утро!
Взял за основу запрос от Гость333
Будьте добры- подскажите пожалуйста, можно ли в запросе
SELECT *
FROM
(
    SELECT
        ROUND(AVG(W), 3) AS Avg_W,
        ROUND(AVG(A), 3) AS Avg_A,
        ROUND(AVG(V), 3) AS Avg_V,
        ROUND(AVG(Y), 3) AS Avg_Y,
        ROUND(AVG(S), 3) AS Avg_S,
        ROUND(AVG(Sl), 3) AS Avg_Sulf
    FROM ARCHIV_1
    WHERE Name = 'АО' AND Model='КС' AND Dat ='2013-01-29' AND id = '1'
) x
CROSS JOIN
(
    SELECT
        ROUND(AVG(W), 3) AS Avg_W_2,
        ROUND(AVG(A), 3) AS Avg_A_2,
        ROUND(AVG(V), 3) AS Avg_V_2,
        ROUND(AVG(Y), 3) AS Avg_Y_2,
        ROUND(AVG(S), 3) AS Avg_S_2,
        ROUND(AVG(Sl), 3) AS Avg_Sulf_2
    FROM ARCHIV_2
    WHERE Name = 'АО' AND Model='КС' AND Dat ='2013-01-29' AND id = '1'
) y

отобразить и другие поля таблицы например поле [NAME] и [MODEL]
7 фев 13, 06:56    [13888174]     Ответить | Цитировать Сообщить модератору
 Re: Запрос - объединение двух таблиц и среднее значение по колонкам  [new]
haungan
Member

Откуда:
Сообщений: 17
Разобрался - добавил сам!
7 фев 13, 07:31    [13888211]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить