SQL获得最高值并连接

时间:2014-10-17 08:57:55

标签: sql sql-server-2008

如果我有以下数据表

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)

2 个答案:

答案 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
        )
;