2010-12-04 14 views
0

J'ai ce tableau:SQL - transaction Recherche contenant 2 ou plusieurs article à l'aide requête

TABLE Transaction 
Trans_ID Name Value Total_Item 
100   I1  0.33333333  3 
100   I2  0.33333333  3 
100   I5  0.33333333  3 
200   I2  0.5    2 
200   I5  0.5    2 
300   I2  0.5    2 
300   I3  0.5    2 
400   I1  0.33333333  3 
400   I2  0.33333333  3 
400   I4  0.33333333  3 
500   I1  0.5    2 
500   I3  0.5    2 
600   I2  0.5    2 
600   I3  0.5    2 
700   I1  0.5    2 
700   I3  0.5    2 
800   I1  0.25    4 
800   I2  0.25    4 
800   I3  0.25    4 
800   I5  0.25    4 
900   I1  0.33333333  3 
900   I2  0.33333333  3 
900   I3  0.33333333  3 
1000   I1  0.2    5 
1000   I2  0.2    5 
1000   I4  0.2    5 

Je dois trouver ce que la transaction contenant un certain article. EX: combinaison de 2 articles

I1 et I2 et de conserver uniquement la valeur de l'article connexe;

Trans_ID Name Value Total_Item 
100   I1  0.33333333  3 
100   I2  0.33333333  3 
400   I1  0.33333333  3 
400   I2  0.33333333  3 
800   I1  0.25    4 
800   I2  0.25    4  
900   I1  0.33333333  3 
900   I2  0.33333333  3  
1000   I1  0.2    5 
1000   I2  0.2    5 

Notez que je montre seulement la transaction contenant l'élément.

ou peut-être 3 élément combinaison I1, I2 et I3

800   I1  0.25    4 
800   I2  0.25    4 
800   I3  0.25    4 
900   I1  0.33333333  3 
900   I2  0.33333333  3 
900   I3  0.33333333  3 

Comment puis-je le code qui en sql? Je travaille avec msaccess)

+0

Cela ne semble pas normalisée. Pour un ID de transaction donné, les valeurs de Value et Total_Item sont-elles toujours les mêmes? –

+0

c'est juste une partie d'une grande image tout le processus supposé être comme ça [Apriori] (http://stackoverflow.com/questions/4349698/sql-data-mining-operation-using-sql-query-fuzzy-apriori -algorithm-how-do-i). La valeur est comptée à partir de 1/transaction totale dans 1 ID de transaction. l'article total est bien combien d'ID d'article dans 1 transaction. – Rico

Répondre

1

Ceux-ci travailleront dans Access:

SELECT * FROM Transaction t 
WHERE t.Trans_ID IN 
    (SELECT t1.Trans_ID 
    FROM (SELECT * 
      FROM Transaction 
      WHERE [Name]="I1") AS t1 
    INNER JOIN 
      (SELECT * 
      FROM Transaction 
      WHERE [Name]="I2") AS t2 
    ON t1.Trans_ID = t2.Trans_ID) 

AND t.Name IN ("I1","I2") 


SELECT * FROM Transaction t 
WHERE t.Trans_ID IN 
    (SELECT t1.Trans_ID 
    FROM ((SELECT * 
      FROM Transaction 
      WHERE [Name]="I1") AS t1 
    INNER JOIN 
      (SELECT * 
      FROM Transaction 
      WHERE [Name]="I2") AS t2 
    ON t1.Trans_ID = t2.Trans_ID) 
    INNER JOIN 
      (SELECT * 
      FROM Transaction 
      WHERE [Name]="I3") AS t3 
    ON t1.Trans_ID = t3.Trans_ID) 

AND t.Name IN ("I1","I2","I3") 
+0

merci :) ça fonctionne parfaitement: D ** maintenant j'ai juste besoin de comprendre comment faire récursif dans vb ** thx – Rico

0

Pour une combinaison de deux élément, recherchez les lignes correspondantes et assurer que toutes les conditions sont réunies dans une clause having:

select Trans_ID 
from `Transaction` 
where Name in ('I1','I2') 
group by 
     Trans_ID 
having COUNT(distinct Name) = 2 

Pour une combinaison de trois élément, vérifiez trois au lieu de deux matches:

select Trans_ID 
from `Transaction` 
where Name in ('I1','I2','I3') 
group by 
     Trans_ID 
having COUNT(distinct Name) = 3 

Si vous êtes intéressé par toutes les colonnes, placez cette requête dans une sous-requête:

select * 
from `Transaction` 
where Trans_ID in 
     (
     select Trans_ID 
     from `Transaction` 
     where Name in ('I1','I2','I3') 
     group by 
       Trans_ID 
     having COUNT(distinct Name) = 3 
     ) 
+0

l'esprit m'aider un peu? La syntaxe sql n'autorise pas count (distinct) puis-je utiliser une autre sous-requête de sous-requête? ou avez-vous des changements à la requête que vous m'avez donnée que je peux implémenter dans l'accès. merci avant la main – Rico