2016-08-30 5 views
3

У меня есть два SQL запросов, оба они работают отдельно, но когда я пытаюсь объединить подол, у меня есть только проблемыКак объединить два SQL запросов

Запрос 1:

SELECT Day(funct_consumatori.timestamp) AS numar_zi, ROUND(SUM(funct_consumatori.timp_functionare) /3600) AS ore_functionare, ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) AS consum, ROUND(ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) * pret_energie.pret, 2) AS estimare 
FROM funct_consumatori 
INNER JOIN consumatori ON consumatori.id = funct_consumatori.consumator 
INNER JOIN pret_energie ON pret_energie.id =1 
WHERE Year(funct_consumatori.timestamp) = Year(
CURRENT_TIMESTAMP) 
AND Month(funct_consumatori.timestamp) = Month(
CURRENT_TIMESTAMP) 
GROUP BY numar_zi DESC 

Запрос 2 :

SELECT Day(ambienta.timestamp) AS numar_zi, TRUNCATE(AVG(temperatura) , 1) AS temp_med, MIN(temperatura) AS temp_min, MAX(temperatura) AS temp_max, TRUNCATE(AVG(umiditate) , 1) AS umid_medie 
FROM ambienta 
INNER JOIN consumatori AS c2 ON c2.id = '1' 
INNER JOIN pret_energie AS pe ON pe.id = '1' 
WHERE Year(ambienta.timestamp) = Year(
CURRENT_TIMESTAMP) 
AND Month(ambienta.timestamp) = Month(
CURRENT_TIMESTAMP) 
GROUP BY numar_zi DESC 

Как я могу объединить их на основе numar_zi (INNER один)?

+0

Возможный дубликат: http://stackoverflow.com/questions/10538539/join-two-select-statement-results – Galz

ответ

2

Я не знаю таблицу и данные, но следующий SQL может работать

select q1.numar_zi 
     ,q1.ore_functionare 
     ,q1.consum 
     ,q1.estimare 
     -- value of q2 start 
     ,q2.numar_zi 
     ,q2.temp_med 
     ,q2.temp_min 
     ,q2.temp_max 
     ,q2.umid_medie 
from 
    (
    SELECT Day(funct_consumatori.timestamp) AS numar_zi 
    , ROUND(SUM(funct_consumatori.timp_functionare) /3600) AS ore_functionare 
    , ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) AS consum 
    , ROUND(ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) * pret_energie.pret, 2) AS estimare 
    FROM funct_consumatori 
    INNER JOIN consumatori ON consumatori.id = funct_consumatori.consumator 
    INNER JOIN pret_energie ON pret_energie.id =1 
    WHERE Year(funct_consumatori.timestamp) = Year(
    CURRENT_TIMESTAMP) 
    AND Month(funct_consumatori.timestamp) = Month(
    CURRENT_TIMESTAMP) 
    GROUP BY numar_zi DESC 
    ) q1 

INNER JOIN 

    (
    SELECT Day(ambienta.timestamp) AS numar_zi 
    , TRUNCATE(AVG(temperatura) , 1) AS temp_med 
    , MIN(temperatura) AS temp_min 
    , MAX(temperatura) AS temp_max 
    , TRUNCATE(AVG(umiditate) , 1) AS umid_medie 
    FROM ambienta 
    INNER JOIN consumatori AS c2 ON c2.id = '1' 
    INNER JOIN pret_energie AS pe ON pe.id = '1' 
    WHERE Year(ambienta.timestamp) = Year(
    CURRENT_TIMESTAMP) 
    AND Month(ambienta.timestamp) = Month(
    CURRENT_TIMESTAMP) 
    GROUP BY numar_zi DESC 
    ) q2 
on 
    q1.numar_zi = q2.numar_zi 

Пожалуйста сделайте изменения в соответствии с вашим RDMS (если это необходимо), но помните, если вы хотите присоединиться два запроса использовать следующий запрос

select t1.Id, t1.Col1, t1.Col2, t2.Id, t2.Col1, t2.Col2 
from 
    (SELECT Id, COUNT(*) AS Col1, Col2 FROM Table2 GROUP BY Id) t1 
INNER JOIN -- or, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN .... 
    (SELECT Id, COUNT(*) AS Col1, Col2 FROM Table2 GROUP BY Id) t2 
on 
    t1.Id= t2.Id 
+0

код работает хорошо, но проблема в том, что у меня есть только две строки, на самом деле запрос 'INNER' из таблицы' ambienta' имеет 2 результата, а 'funct_consumatori'query имеет 31 (la первые дни текущего месяца), так что я могу сделать, чтобы взять все данные из таблицы с полными данными за каждый день, а если в другой таблице есть данные за тот же день, чтобы назначить текущую таблицу? –

+1

Это нормально, мне нужно было просто использовать «ПРАВИЛЬНОЕ ПРИСОЕДИНЕНИЕ» и некоторые небольшие модификации, благодаря большому Raihan, у вас есть мой upvote! –