ПРИСОЕДИНЯЙСЯ К СУММЕ - PullRequest
       13

ПРИСОЕДИНЯЙСЯ К СУММЕ

0 голосов
/ 28 сентября 2018

Я не мог понять это из существующих подобных тем.Я пытался покинуть соединение и разного рода подзапросы, но не повезло.Я получил возможность работать вместе с группой, но не мог понять, как добавить предложения where, потом не попал в подзапросы и разбил все.

У меня есть две таблицы хранилище и заказов .

В хранилище есть список уникальных id и name

    id   | name
    1234 | product1
    1235 | product2
    A123 | product3

Заказы имеют несколько экземпляров код , количество и тип

code | qty| type
1234 | 10 | order
1234 | 10 | quote
1234 | 10 | order
A123 | 15 | order
1235 | 13 | order

Я хочу 't, чтобы объединить эти таблицы, чтобы я отфильтровал (с помощью которого) результаты из хранилища и соединил с суммированным кол-во , где type - порядок .

Например, хранилище фильтра , где должен получиться идентификатор в (1234, A123) :

id   | name     | sum qty    
1234 | product1 | 20
A123 | product3 | 15

Любая помощь приветствуется!

-

Идетвперед, на складе есть продукты и цвета.Есть таблица prod_to_col, у которой есть productid и col_id, чтобы связать их вместе.Мне нужно было бы взять коды продуктов из таблицы prod_to_col и показать общее количество для столбцов в соответствии с количеством заказа.

Я пробовал это в соответствии с примером @ iSR5:

SELECT st.id, st.name, SUM(order.qty) AS SumQty
FROM storage
JOIN prod_to_col ON st.id=prod_to_col.col_id 
JOIN orders ON order.id IN (SELECT prod_id FROM prod_to_col WHERE col_id=st.id) AND type='order'
WHERE id IN (1234, A123)
GROUP BY st.id, st.name 

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

В дополнение к хранению таблиц и порядкам выше, вот пример prod_to_col и cols:

Prod_to_col

prod_id | col_id | col_qty (per product)
1235    | C101   | 2
1236    | C102   | 1 

Cols

col_id | name   | other data
C101   | cname1 | --
C102   | cname2 | --

Заказы

prod_id | qty | type
1235    | 10  | order
1235    | 10  | order
1236    | 2   | quote
1236    | 5   | order

Хранение

st.id | st.name| SumQty
C101  | cname1 | 40
C102  | cname2 |  5

Я понимаю, что мне нужно использовать два разных предложения для заполнения списка хранения, одиндля продуктов и один для cols.Один для продуктов отлично работает.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Это то, что вам нужно?

DECLARE @Storage TABLE(ID VARCHAR(50), name VARCHAR(250) )
DECLARE @Orders TABLE(code VARCHAR(50), qty INT, type VARCHAR(50))

INSERT INTO @Storage VALUES
    ('1234','product1')
,   ('1235','product2')
,   ('A123','product3')

INSERT INTO @Orders VALUES 
    ('1234',10,'order')
,   ('1234',10,'quote')
,   ('1234',10,'order')
,   ('A123',15,'order')
,   ('1235',13,'order')

SELECT 
    s.ID 
,   s.name 
,   SUM(o.qty) TotalQty
FROM 
    @Storage s 
JOIN @Orders o ON o.code = s.ID AND o.type = 'order'
WHERE 
    s.ID IN('1234','A123')
GROUP BY 
    s.ID 
,   s.name  

ОБНОВЛЕНИЕ

Вы обновили свой пост, добавив больше логики, чего раньше не было, однако я обновил запросдля тебя ..

DECLARE @Storage TABLE(ID VARCHAR(50), name VARCHAR(250) )
DECLARE @Orders TABLE(code VARCHAR(50), qty INT, type VARCHAR(50))
DECLARE @Prod_to_col TABLE(prod_id VARCHAR(50), col_id  VARCHAR(50), col_qty INT)
DECLARE @Cols TABLE(col_id VARCHAR(50), name  VARCHAR(250))


INSERT INTO @Storage VALUES
    ('1234','product1')
,   ('1235','product2')
,   ('A123','product3')
,   ('1236','product3')

INSERT INTO @Orders VALUES 
    ('1234',10,'order')
,   ('1234',10,'quote')
,   ('1234',10,'order')
,   ('A123',15,'order')
,   ('1235',10,'order')
,   ('1235',10,'order')
,   ('1236',2,'quote')
,   ('1236',5,'order')

INSERT INTO @Prod_to_col VALUES 
    ('1235','C101',2)
,   ('1236','C102',1)


INSERT INTO @Cols VALUES 
    ('C101','cname1')
,   ('C102','cname2')




SELECT 
    c.col_id 
,   c.name 
,   SUM(o.qty) * MAX(ptc.col_qty) TotalQty
FROM 
    @Storage s 
JOIN @Orders o ON o.code = s.ID AND o.type = 'order'
JOIN @Prod_to_col ptc ON ptc.prod_id = o.code
JOIN @Cols c ON c.col_id = ptc.col_id
--WHERE 
--    s.ID IN('1234','A123')
GROUP BY 
    c.col_id 
,   c.name 
0 голосов
/ 28 сентября 2018

Попробуйте использовать левое объединение в сочетании с группой

SELECT OD.CODE
      ,ST.PRODUCT
      ,SUM(quantity) as qnt
FROM ORDERS OD 
     LEFT JOIN STORAGE ST ON(OD.CODE = SG.CODE)
WHERE OD.type like 'order'
GROUP BY
      OD.CODE
      ,ST.PRODUCT

. Вы можете использовать Фильтр

Having id in (1234, A123)

Привет

...