Sql server 和WHERE求和
我无法从现有的类似线程中找出这一点。我尝试过左连接和不同类型的子查询,但没有成功。 我被允许加入GroupBy的工作,但我不知道如何添加where子句,然后我就不能加入子查询,并破坏了一切 我有两个表存储和订单 存储器具有唯一的id和名称的列表Sql server 和WHERE求和,sql-server,join,sum,subquery,Sql Server,Join,Sum,Subquery,我无法从现有的类似线程中找出这一点。我尝试过左连接和不同类型的子查询,但没有成功。 我被允许加入GroupBy的工作,但我不知道如何添加where子句,然后我就不能加入子查询,并破坏了一切 我有两个表存储和订单 存储器具有唯一的id和名称的列表 id | name 1234 | product1 1235 | product2 A123 | product3 code | qty| type 1234 | 10 | order 1234 | 10 | quo
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
订单有多个实例代码、数量和类型
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
我不想联接这些表,以便从存储中获得过滤(带where)结果,并联接合计数量,其中类型为订单
例如,过滤器存储其中(1234,A123)中的id应产生:
id | name | sum qty
1234 | product1 | 20
A123 | product3 | 15
感谢您的帮助
--
展望未来,存储有产品和COL。有一个表prod_to_col,它有productid和col_id将它们连接在一起。
我需要从表prod_到col中获取产品代码,并根据订单数量显示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_id | col_id | col_qty (per product)
1235 | C101 | 2
1236 | C102 | 1
科尔斯
命令
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
我知道我需要使用两个不同的句子来填充存储列表,一个用于产品,一个用于COL。用于产品的一个很好。尝试使用Left Join和group by组合
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)
问候语这是你需要的吗
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
我尝试了左连接和不同类型的子查询,但没有成功。
我将问题扩展到包含子查询是同一句话。这似乎是一个常见的错误,人们希望连接单独的连接组聚合。有时可以通过一系列连接来表示,然后是唯一的聚合。请总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,有或没有你的特定字符串/名称,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用1个变体搜索作为标签的标题和关键字。请参见文本上方的向下投票箭头鼠标。当你有一个非重复代码问题要发布时,请阅读并采取行动。但我不想对type=order的问题求和。我不明白这个例子是怎么做到的。好的,你们可以在同一个句子中使用WHERE和have。工作正常,谢谢!因此,在本例中,where子句替换为join上的扩展声明。我那未经训练的眼睛说这也行,但不能确定。我想我会选择where,因为实际情况比我的简化示例有更多的条件。@rami如果你直接在连接上使用过滤,你只会连接那组记录,但是如果你把它移到where下面,您的联接将获取另一个表中与code=id
匹配的所有内容,然后它将从WHERE-caluse中过滤这些内容。因此,两者的输出相同,但性能会有所不同,特别是在大型表格中。感谢您的深入解释,谢谢。经过测试,它完全符合我的需要。我将继续下一步,看看哪一个解决方案更容易用更多的表来扩展。你们能看看带子查询的编辑文章吗?谢谢@rami尝试将order.id=prod\u连接到col.prod\u id和type='order',如果不起作用,请提供存储、订单和prod\u连接到col的表格模式以及每个表格的示例。