2016-04-14 1 views

Répondre

0

Oui, par exemple:

q)t:([]k: 1 2 1; v:`A`B`C) 
q)ej[`k;t;t] 
k v 
--- 
1 A 
1 C 
2 B 
1 A 
1 C 

MISE À JOUR: vous pouvez filtrer les résultats cependant vous aimez:

q)select from ej[`k;t;t] where (v=`A) or k=2 
k v 
--- 
1 A 
2 B 
1 A 

MISE À JOUR 2: Si vous avez besoin est tout ce que vous trouverez des doublons vous ne avez pas besoin de autojointure votre table tout:

q)t:([]k: 1 2 3 4 5; v:`A`B`A`C`C) 
q)select from t where 1<(count;v)fby v 
k v 
--- 
1 A 
3 A 
4 C 
5 C 
+0

Merci. À mi-chemin:). Que diriez-vous d'une clause where? Dites que j'ai t: ([] k: 1 2 3; v: \ 'A \' B \ 'A) et je veux que la requête me retourne" 1 A "et" 3 A "(sur des lignes identiques ou différentes) qui ont le même 'v. – tonank

+0

On dirait que je ne comprends pas ce que vous voulez retourner. Qu'est-ce que '3 A'? Il n'y a pas 3 dans mon exemple. –

+0

Dans mon exemple il y a. Dans votre mise à jour, les clauses where contiennent des valeurs directes, je voulais éviter cela (comme dans l'exemple SQL). Jusqu'à présent, la réponse de Michael ci-dessous est la meilleure pour mes besoins, mais la vôtre est meilleure pour la question initiale. – tonank

0

Pour la 2ème question (ne me laissera pas commenter, afin d'ajouter ici) , vous pourriez peut-être faire quelque chose comme le ci-dessous

t:([]k: 1 2 3 4 5; v:`A`B`A`C`C) 

select from t where v in (exec v from (select count i by v from t) where x>1) 

ungroup select from (`v xgroup t) where (count each k)>1 
+0

Merci. Cela répond vraiment à mes besoins, j'ai marqué l'autre réponse, car elle concerne plus directement la question. – tonank