如果我有以下数据表
ProductID,StockOnSite,StockOffsite
1 83 81
1 98 85
1 112 101
2 81 85
2 115 83
2 115 101
我需要做的是获取每个ProductID的最高StockOnSite(计算StockDifference)记录,并将StockOnSite与StockOffsite结合以创建一个StockInfo列
需要输出
ProductID,StockOnSite,StockOffsite,StockDifference,StockInfo
1 98 85 13 98/85
2 115 83 32 115/83
SQL我想出了
select ProductID
,StockOnSite
,StockOffsite
,StockDifference = max(StockOnSite - StockOffsite)
from Product
group by ProductID, StockOnSite, StockOffsite
我不知道从哪里开始?
由于
以下是构建表和数据的查询:
CREATE TABLE Products
(
ProductID int NOT NULL,
StockOnSite int NOT NULL,
StockOffsite int NOT NULL
)
insert into table Products(ProductID, StockOnSite, StockOffsite) values(1,83,81)
insert into table Products(ProductID, StockOnSite, StockOffsite) values(1,98,85)
insert into table Products(ProductID, StockOnSite, StockOffsite) values(1,112,101)
insert into table Products(ProductID, StockOnSite, StockOffsite) values(2,81,85)
insert into table Products(ProductID, StockOnSite, StockOffsite) values(2,115,83)
insert into table Products(ProductID, StockOnSite, StockOffsite) values(2,115,101)
答案 0 :(得分:1)
select ProductID
,StockOnSite
,StockOffsite
,StockOnSite - StockOffsite
,cast(Stockonsite as varchar(10))+'/' +cast(StockOffsite as varchar(10))
from Products pr1
where StockOnSite - StockOffsite = (Select max(StockOnSite - StockOffsite)
from Products pr2
where pr1.ProductID = pr2.ProductID
)
group by ProductID, StockOnSite, StockOffsite
答案 1 :(得分:1)
这应该可以解决问题 查询需要跟踪产品,以便在多于1个产品中出现相同的库存差异时不要混淆:
select p.ProductID
,p.StockOnSite
,p.StockOffsite
,(p.StockOnSite - p.StockOffsite) StockDifference
,concat(p.StockOnSite,'/',p.StockOffsite) StockInfo
from Products p
where concat(ProductID,'-',(StockOnSite - StockOffsite)) =
(
select concat(ProductID,'-',max((StockOnSite - StockOffsite)))
from Products p2
where p2.ProductID = p.ProductID
group by ProductID
)
;