2014-11-13 3 views
2

Я пытаюсь объединить результаты двух моих запросов в одну таблицу результатов, и я не уверен, как это сделать. Я пытался играть с операторами UNION и JOIN, но не мог понять. Это SQL для двух запросов, которые я хочу объединить. Оба отдельных запроса получают результаты, которые они должны использовать. Заранее спасибо!Добавить столбец из второго запроса SQL

SELECT s.Store_Num || ': ' || s.Store_Name AS "Store", 
     COUNT(e.Store_Num) AS "Total Rented" 
FROM Employee e JOIN store s ON e.Store_Num = s.Store_Num 
     JOIN rental r ON e.Emp_ID = r.Emp_ID 
     JOIN rented_item ri ON r.Rental_Num = ri.Rental_Num 
WHERE(SYSDATE - Rent_Date) < 60 
GROUP BY s.Store_Num, s.Store_Name; 
UNION 
SELECT COUNT(i.Store_Num) AS "Total Inventory" 
FROM inventory i JOIN store s ON i.Store_Num = s.Store_Num 
GROUP BY s.Store_Num, s.Store_Name; 
+0

проверить, что объединение querys должен выбрать одинаковое количество значений – Aramillo

ответ

4

Просто упакуйте несколько подвыборов в одном заявлении!

У вас есть два запроса, которые подсчитывают строки, поэтому они должны быть записаны как два запроса, каждый из которых имеет COUNT (*), потому что вы подсчитываете строки, или вы должны использовать COUNT (item_num), потому что вы подсчитываете элементы, а не магазины, это будет понятнее для читателя.

Вы затем просто выбираете все магазины и для каждого магазина вы делаете два счета в подзапросах - это легко поддерживать, а оптимизатор должен получить правильные предикаты соединения.

SELECT s.Store_Num || ': ' || s.Store_Name "Store", 
     (SELECT COUNT(*) 
      FROM Employee e 
      JOIN rental r ON e.Emp_ID = r.Emp_ID 
      JOIN rented_item ri ON r.Rental_Num = ri.Rental_Num 
      WHERE e.Store_Num = s.Store_Num 
      AND (SYSDATE - Rent_Date) < 60 
     ) "Total Rented", 
     (SELECT COUNT(*) 
      FROM inventory i WHERE i.Store_Num = s.Store_Num 
     ) "Total Inventory" 
    FROM store s 
; 
+0

Вы случайно знаете, как разделить второй и третий столбцы? Я уверен, что в конце концов все выясню, но подумал, что спрошу. – kirie

+0

Разделите вместе? Вы хотите добавить их значения? Одна колонка с арендованным + инвентарем? – Falco

+0

Я имею в виду как арендованный/инвентарь. Он сообщает мне, что инвентарь является недопустимым идентификатором. – kirie

0

Попробуйте этот запрос: -

SELECT s.Store_Num || ': ' || s.Store_Name AS "Store", COUNT(e.Store_Num) AS "Total Rented", 
     COUNT(i.Store_Num) AS "Total Inventory" 
FROM Employee e JOIN store s ON e.Store_Num = s.Store_Num 
JOIN rental r ON e.Emp_ID = r.Emp_ID 
JOIN rented_item ri ON r.Rental_Num = ri.Rental_Num 
JOIN inventory i ON i.Store_Num = s.Store_Num 
WHERE(SYSDATE - Rent_Date) < 60 
GROUP BY s.Store_Num, s.Store_Name; 

Это может помочь вам.

+1

я не думаю, что это будет работать, потому что с дополнительным присоединяется к вашему количеству строк будут взрываются! - пример: 2 аренды и 2 предмета приведут к 4 рядам, и поэтому каждая строка подсчитывается дважды! – Falco

+0

Falco правильно, подсчитанные подсчеты слишком высоки, когда я ввожу этот запрос. Я также попытался создать две новые таблицы в предложении FROM, но это, похоже, не приближалось к тому, что я хотел – kirie

2

Судя по вашим колонкам, UNION - это не то, что вы хотите. Пара различных вариантов будет заключаться в том, чтобы использовать JOIN или sub-запрос. Я не знаю, как настроены все ваши данные, но это должно быть близко.

SELECT s.Store_Num || ': ' || s.Store_Name AS "Store", 
     COUNT(e.Store_Num) AS "Total Rented", (
      SELECT COUNT(i.Store_Num) 
      FROM inventory i 
      WHERE i.Store_Num = s.Store_Num) AS "Total Inventory" 
FROM Employee e 
JOIN store s 
ON e.Store_Num = s.Store_Num 
JOIN rental r ON e.Emp_ID = r.Emp_ID 
JOIN rented_item ri ON r.Rental_Num = ri.Rental_Num 
WHERE(SYSDATE - Rent_Date) < 60 
GROUP BY s.Store_Num, s.Store_Name; 
+0

Я думаю, что вы на высоте +1 – Aramillo

+0

Большое спасибо. Вот и все. – kirie

+0

Я бы упаковал оба запроса в подзапросы, с этими смесями трудно отличить, как подзапрос связан с соединениями ... – Falco

Смежные вопросы