Выбрать из нескольких таблиц с группировкой в ​​SQL - PullRequest
0 голосов
/ 18 октября 2019

У меня есть два представления: представление Purchase_Details:

InvoiceId
ItemId
Quantity
Price
ExpireDate
ItemCode
StoreId

и представление Sale_Details

InvoiceId
ItemId
Quantity
Price
ItemCode
StoreId

и таблица элементов:

ID
Name
SalePrice
PurchasePrice

Purchase_Detail Просмотр данных

Id  StoreId ItemCode        Price            Quantity         ItemId       ExpireDate
51    1      345            300.00           1.00                5          2019-10-25
52    1      348            300.00           22.00               5          2019-10-04
53    2      348            300.00           17.00               5          2019-11-11
54    1      345            300.00           8.00                5          2019-12-12

Sale_Details Просмотр данных

Id  StoreId    ItemCode          Price         Quantity         ItemId
55       1       345            300.00          4.00              5
56       1       348            300.00          3.00              5

Я хочу найти сумму количества каждого элемента, сгруппированного по ItemId и ItemCode.

Второе: лучше ли выставить продажии купить и одну и ту же таблицу или разделить их (как я?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Я думаю, вы сначала захотите объединить данные, а затем сгруппировать их так, чтобы сумма пересекла множества. Вы можете сделать это с помощью CTE. Примерно так:

WITH CTE_Detail AS (
    SELECT ItemId, ItemCode, Quantity FROM Purchase_Details
    UNION ALL
    SELECT ItemId, ItemCode, Quantity FROM Sale_Details 
)

SELECT ItemId, ItemCode, SUM(Quantity) AS Quantity 
FROM CTE_Detail
GROUP BY ItemId, ItemCode

Что касается вашего вопроса о том, «что лучше», то это зависит от того, как вы хотите его использовать. Очевидно, что в этом запросе есть небольшая дополнительная сложность, поскольку они разделены, но это может помочь вам в других областях. Я полагаю, вы сказали, что это взгляды, так что, неужели у вас не может быть обоих?

0 голосов
/ 18 октября 2019

Это должно сделать это

with purchases as (
    select
        ItemId,
        ItemCode,
        sum(quantity) as purchase_sum
    from
        Purchase_Detail
    group by
        1,
        2
),
sales as (
    select
        ItemId,
        ItemCode,
        sum(quantity) as sales_sum
    from
        Sales_Details
    group by
        1,
        2
)
select
    ItemId,
    ItemCode,
    (
        purchase_sum - sales_sum
    ) as net
from
    purchases
join sales
        using (
        ItemId,
        ItemCode
    )
...