我无法从现有的类似线程中弄清楚这一点。我试过左联接和其他类型的子查询,但是没有运气。 我离开了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。一种用于产品的效果很好。
答案 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