2014-10-17 4 views
0

나는 다음과 같은 데이터 테이블이있는 경우SQL 가장 높은 값을 얻을 연결할

ProductID,StockOnSite,StockOffsite 
    1   83   81  
    1   98   85  
    1   112   101  
    2   81   85  
    2   115   83  
    2   115   101  

내가 만들 StockOffsite로 최고 제품 ID 당 StockOnSite합니다 (StockDifference 계산) 레코드와 concatinate StockOnSite를 얻을 수있다 할 필요 열은 StockInfo

출력 필요

ProductID,StockOnSite,StockOffsite,StockDifference,StockInfo 
    1   98   85   13   98/85 
    2   115   83   32   115/83 

SQL 나는

,536,913,632와 함께 올라와있다 10
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 98 선택 않았다
쿼리는 같은 재고의 차이가 1 개 이상의 제품에서 발생하는 경우 혼동하지 않도록 제품을 추적 할 필요가 있겠습니까? 당신이 가장 높은 차이를 찾고 있기 때문에 그런 것입니까? – dasblinkenlight

+0

어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

+0

ProductID 1의 차이는 98-85 = 13입니다. – user142617

답변

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

이 트릭을 할해야한다가. 또한 115있을 때,

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 
     ) 
; 
관련 문제