2013-03-28 5 views
1

Résumé; Rejoindre certaines tables a des résultats similaires dans certaines colonnes. Comment pouvons-nous les regrouper et sélectionner max (colonne).Rejoindre et regrouper les résultats

Ma requête est;

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' 

Et aussi répondre à partir de la base de données est;

code ProdCode --------------- COST - LREF ------ une twho trois quatre

K-3773 868328002749220 46255 50,85 --- ---- 0 10 0 33584

K-3773 868328002749220 46504 50,85 ------- 46255 10 33584 33639

K-3773 868328002749220 46524 50,85 ------- 46504 11 33639 33640

K-3773 868328002749220 51273 ------- 50,85 46524 11 33640 38581

K-3773 868328002749220 51285 50,85 ------- 51273 9 38581 38587

K-3773 868328002749220 52275 50,85 ------- 51273 11 38581 39823

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

Et maintenant mon problème est, comment puis-je sélectionner la dernière rangée. Il peut être plus grand de la colonne LREF ou de la colonne-un.

Mes requêtes sont identiques. J'utilise des nombres où l'évaluation et les résultats sont les mêmes que celui-ci.

J'ai essayé d'utiliser max (nom_colonne) avec le groupe par d'autres colonnes, etc. J'ai utilisé le concepteur de requêtes avec l'outil de gestion de serveur microsoft sql.

Dans ce tableau, les colonnes non sélectionnées ne sont pas importantes pour moi. Avec mysql, je peux le faire avec select ... max (lref) de ... joint ... groupe par code mais je dois le faire avec mssql.

+0

Top 1000 est important parce que dans mon où il est plus que 1 expression. où code = '1' ou code = '2' etc. etc. Et j'ai besoin de la dernière rangée de ces codes. – esesesx

Répondre

0

requête (probablement sera cher):

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) 

Exemple requête SQLFIDDLEExample:

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

Résultat:

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

Je l'ai essayé avec un où expression c'est okey mais quand j'essaye où code = '1' ou code = '2' la première rangée est ligne simple mais les lignes du deuxième code sont 5 lignes. Ces codes sont des produits. Je veux sélectionner tous les produits d'abord les grandes lignes. – esesesx

+0

ok donc le deuxième code toutes les 5 lignes ont le même LREF? Si oui comment savoir quelle ligne il devrait retourner? Peut-être n'a pas d'importance, il suffit de retourner 1 ligne avec max (LREF)? – Justin

Questions connexes