2012-04-04 3 views
3

Я использовал этот форум какое-то время, чтобы найти ответы на некоторые вопросы, связанные с SQL. Теперь пришло время задать вопрос, который я пытался выяснить в течение некоторого времени.SQL SELECT с несколькими таблицами и SUM

У меня есть две таблицы (продукт и источник).

Я хотел бы создать SQL SELECT для извлечения списка записей из источника и одной дополнительной записи из продукта (SUM цены). Таблица, которую я хотел бы увидеть, должна выглядеть примерно так:

source.source_id | Источник | source.source_name | source.source_description | source.source_date | source.price | SUM (product.price) | SUM (product.price) WHERE product.quantity < 1 (это последняя колонка, где я застреваю).

источник.location и product.location связаны.

Этот код работает и дает результат я хочу:

SELECT s.source_id 
    , s.location 
    , s.source_name 
    , s.source_description 
    , s.source_date 
    , s.source_price 
    , p2.Total 
    , sum(p1.price) as SumProductSold 
FROM source s 
JOIN product p1 
    on s.location = p1.location 
JOIN 
(
    SELECT location, sum(price) as Total 
    FROM product 
    GROUP BY location 
) p2 
    on s.location = p2.location 
WHERE p1.quantity < 1 
GROUP BY s.source_id, s.location, s.source_name 
    , s.source_description, s.source_date, s.source_price, p2.Total 

Спасибо вам bluefeet !!

+0

У вас есть два одинаковых столбца? 'SUM (product.location) | SUM (product.location) ' –

+0

Кроме того, если source.location = product.location, зачем вы хотите использовать SUM для product_location? –

+0

'WHERE ???. Местоположение * меньше * 0'? –

ответ

4

без много деталей ваш может сделать что-то вроде этого:

SELECT s.source_id 
    , s.location 
    , s.source_name 
    , s.source_description 
    , s.source_date 
    , s.price 
    , sum(p.price) as SumProductPrice 
    , sum(p.location) as SumProductLocation 
FROM source S 
JOIN product p 
    on S.location = p.location 
WHERE p.quantity < 1 
GROUP BY s.source_id, s.location, s.source_name 
    , s.source_description, s.source_date, s.price 

если вы разместите более подробную информацию, тогда запрос можно будет точно настроить.

EDIT:

вы можете присоединиться на столе продуктов во второй раз, чтобы получить общее для местоположения:

SELECT s.source_id 
    , s.location 
    , s.source_name 
    , s.source_description 
    , s.source_date 
    , s.price 
    , sum(p1.price) as SumProductPrice 
    , p2.Total 
FROM source S 
JOIN product p1 
    on S.location = p1.location 
JOIN 
(
    SELECT location, sum(price) as Total 
    FROM product 
    WHERE quantity < 1 
    GROUP BY location 
) p2 
    on S.location = p2.location 
WHERE p1.quantity < 1 
GROUP BY s.source_id, s.location, s.source_name 
    , s.source_description, s.source_date, s.price, p2.Total 
+0

Я храню информацию о приобретенных продуктах в исходной таблице. Я могу перечислить всю информацию из этой таблицы, но я хотел бы иметь дополнительную колонку (СУММ проданного продукта). Ссылка - это идентификатор местоположения (source.location и product.location). –

+0

- это вопрос, который я предлагаю не дать вам результат, который вы хотите? если нет, то что кажется неправильным? – Taryn

+0

Я получаю сообщение об ошибке: # 1054 - Неизвестный столбец 'source.location' в 'списке полей' –

0

Я не уверен, я полностью понимаю вашу структуру таблицы, но что-то, как это должно работать:

Select source.source_id, 
    source.location, 
    source.source_name, 
    source.source_description, 
    source.source_date, 
    source.price, 
    sum(production.location) 
from source, product 
    where source.location = production.location 
    and location < 0 
group by source.source_id, 
    source.location, 
    source.source_name, 
    source.source_description, 
    source.source_date, 
    source.price 
0

Из того, что я понимаю, хотите что-то вроде этого:

SELECT source.source_id, 
     source.location, 
     source.source_name, 
     source.source_description, 
     source.source_date, 
     source.price, 
     SUM(product.price) AS Price1, 
     SUM(CASE WHEN product.quantity < 1 THEN product.price ELSE 0 END) AS Price2 
FROM Source 
     INNER JOIN Product 
      ON Product.Location = Source.Location 
GROUP BY 
     source.source_id, 
     source.location, 
     source.source_name, 
     source.source_description, 
     source.source_date, 
     source.price 
+0

Я получаю текущую ошибку: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с [Price1], SUM (CASE WHEN product.quantity <1 THEN product.price ELSE 0 E 'в строке 7 –

+0

Извините, отредактированный ответ, он должен теперь бегите. – GarethD

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