在哪里加入总和

时间:2018-09-28 19:41:02

标签: sql-server join sum subquery

我无法从现有的类似线程中弄清楚这一点。我试过左联接和其他类型的子查询,但是没有运气。 我离开了group by的联接工作,但无法弄清楚如何添加where子句,然后转向子查询并破坏了所有内容。

我有两个表存储订单

存储具有唯一的 id 名称

的列表
[String]

订单具有多个实例代码数量类型

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

我不想加入这些表,以便从存储中得到过滤后的结果(),并加入求和数量,其中类型为订单< / strong>。

例如过滤器存储(1234,A123)中的ID应该产生的结果:

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

任何帮助表示赞赏!

-

展望未来,存储拥有产品和列。有一个表prod_to_col,它具有productid和col_id以将它们绑定在一起。 我需要从prod_to_col表中获取产品代码,并根据订单数量显示cols的总数量。

我根据@ iSR5示例对此进行了尝试:

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

这几乎可以用,但是数量乘以几行就可以了,有人可以指出问题出在哪里吗?

除了上面的表存储和顺序外,这里还有prod_to_col和cols的示例:

Prod_to_col

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_id | col_id | col_qty (per product)
1235    | C101   | 2
1236    | C102   | 1 

订单

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

我知道我需要使用两个不同的句子来填充存储列表,一个用于产品,另一个用于cols。一种用于产品的效果很好。

2 个答案:

答案 0 :(得分:0)

尝试结合使用左联接和

分组
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)

问候

答案 1 :(得分:0)

这是您需要的吗?

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