2013-03-28 3 views
1

요약; 일부 테이블을 조인 할 때 일부 열이 비슷한 결과를 얻습니다. 그룹화하고 최대 (열)을 선택하려면 어떻게해야합니까?결과 결합 및 그룹화

내 검색어는입니다.

SELECT DISTINCT TOP (1000) LG_070_ITEMS.CODE AS PRODCODE, 
       LG_070_01_SERILOTN.CODE AS CODE, 
       LG_070_01_SLTRANS.OUTCOST, 
       LG_070_01_SLTRANS.LOGICALREF AS LREF, 
       LG_070_01_SLTRANS.INSLTRANSREF, 
       LG_070_01_SLTRANS.INVENNO, 
       LG_070_01_SLTRANS.INTRANSREF, 
       LG_070_01_SLTRANS.STTRANSREF 
FROM LG_070_01_SERILOTN 
INNER JOIN LG_070_01_SLTRANS ON LG_070_01_SLTRANS.SLREF = LG_070_01_SERILOTN.LOGICALREF 
INNER JOIN LG_070_ITEMS ON LG_070_ITEMS.LOGICALREF = LG_070_01_SERILOTN.ITEMREF 
WHERE [TIGERDB].[dbo].[LG_070_01_SERILOTN].CODE = '868328002749220' 

또한 데이터베이스에서 대답은;

Prodcode 코드 --------------- 비용 - LREF ------ 1 ~ 4

세 twho K-3773 868328002749220 50,85 46255 --- ---- 0 10 0 33,584

K-3773 868,328,002,749,220 50,85 ------- 46,504 46,255 33,584 33,639 10

K-3773 868,328,002,749,220 50,85 46,524 ------- 46,504 11 33,639 33,640

K-3773 868,328,002,749,220 50,85 ------- 51,273 46,524 33,640 38,581 11

,174,515 15,

K-3773 868,328,002,749,220 50,85 ------- 51,285 51,273 38,581 38,587 9

K-3773 868,328,002,749,220 50,85 ------- 52,275 51,273 38,581 39,823 11

K- 3773 868328002749220 50,85 52276 ------- 52275 9 39823 39824

이제 문제는 어떻게 마지막 행을 선택할 수 있는가입니다. 그것은 LREF Column이나 column-one보다 클 수 있습니다.

내 검색어가 같습니다. 나는 stuation과 결과가 이것과 같은 곳에서 숫자를 사용하고있다.

나는 othercolumns 등에 의해 그룹과 max (columname)를 사용하려고했습니다. Microsoft SQL Server 관리 도구로 쿼리 디자이너를 사용했습니다.

세 개의 테이블에서 선택되지 않은 열은 me.With select ... max (lref) from ... join ... ... 코드별로 그룹화 할 수 있지만이 작업을 수행해야합니다. mssql.

+0

최고 1,000이 때문에 내 경우에 중요하다 1 이상의 표현입니다. 어디 코드 = '1'또는 코드 = '2'.. 등. 그리고 그 코드의 마지막 행이 필요합니다. – esesesx

답변

0

쿼리 (아마 비싼 것입니다) :

SELECT DISTINCT TOP (1000) t3.CODE AS PRODCODE, 
       t.CODE AS CODE, 
       t2.OUTCOST, 
       t2.LOGICALREF AS LREF, 
       t2.INSLTRANSREF, 
       t2.INVENNO, 
       t2.INTRANSREF, 
       t2.STTRANSREF 
FROM LG_070_01_SERILOTN t 
INNER JOIN LG_070_01_SLTRANS t2 ON t2.SLREF = t.LOGICALREF 
INNER JOIN LG_070_ITEMS t3 ON t3.LOGICALREF = t.ITEMREF 
WHERE t.CODE = '868328002749220' 
AND t2.LOGICALREF = (SELECT MAX(tt2.LOGICALREF) 
         FROM LG_070_01_SERILOTN tt 
         INNER JOIN LG_070_01_SLTRANS tt2 
          ON tt2.SLREF = tt.LOGICALREF 
         INNER JOIN LG_070_ITEMS tt3 
          ON tt3.LOGICALREF = tt.ITEMREF 
          WHERE tt.CODE = t.CODE) 

예 쿼리 SQLFIDDLEExample :

SELECT DISTINCT TOP (1000) t.* 
FROM Table1 t 
WHERE t.LREF = (SELECT MAX(tt.LREF) 
       FROM Table1 tt 
       WHERE tt.CODE = t.CODE) 

결과 :

| PRODCODE |   CODE | COST | LREF | ONE | TWHO | THREE | FOUR | 
----------------------------------------------------------------------------- 
| K-3773 | 868328002749220 | 50,85 | 52276 | 52275 | 9 | 39823 | 39824 | 
+0

하나와 함께 그것을 시도했지만 어디에 코드를 = '1'또는 코드 = '2'첫 번째 행은 한 줄이지만 두 번째 코드의 줄은 5 줄입니다. 이 코드는 제품입니다. 모든 제품에서 첫 번째 큰 줄을 선택하고 싶습니다. – esesesx

+0

두 번째 코드가 모두 5 줄이면 같은 LREF가됩니까? 만약에 그것이 선을 돌려야하는 경우에 어떻게 알 수 있습니까? 어쩌면 문제가되지 않을 수도 있습니다. max (LREF)로 1 행을 반환 하시겠습니까? – Justin