2016-07-28 1 views
1

Je suis en train de sélectionner les accès pour les patients où d11.xblood est une valeur minimale regroupées par d11.xpid - et où d11.xcaccess_type n'est pas 288, 289 ou 292. (d11.xblood est un indice chronologique des accès)Sélectionner valeur minimale de la colonne A où la colonne B n'est pas dans un tableau

  • d11.xpid:. ID patient (int)
  • d11.xblood: Index chronologique unique des accès des patients (int)
  • d11.xcaccess_type: identifiant unique pour l'accès (int)

Je veux signaler une ligne pour chaque d11.xpidd11.xblood est pour sa d11.xpid respective au minimum (accès initial). De plus, je veux exclure la ligne si l'accès initial pour un d11.xpid a une valeur de 288 d11.xcaccess_type, 289 ou 292.

J'ai essayé plusieurs variantes de ce dans le Select Expert:

{d11.xblood} = Minimum({d11.xblood},{d11.xpid}) and 
not ({d11.xcaccess_type} in [288, 289, 292]) 

Cette sélectionne correctement les lignes avec l'accès initial mais élimine les lignes où l'accès actuel n'est pas dans le tableau. Je veux seulement éliminer les lignes où l'accès initial n'est pas dans le tableau. Comment puis-je accomplir cela?

Table d'échantillons:

xpid xblood xcaccess_type 
---- ------ ------------- 
1  98  400 
1  49  300 
1  152  288 
2  33  288 
2  155  300 
2  70  400 
3  40  300 
3  45  400 

Exemple de sortie souhaitée:

xpid xblood xcaccess_type 
---- ------ ------------- 
1  49  300 
3  40  300 

Voir qui xpid = 2 est pas dans la sortie en raison de sa valeur minimale de xblood avait une xcaccess_type = 288 qui est exclu. Voir aussi que même si xpid = 1 a un xcaccess_type = 288, parce qu'il y a une valeur inférieure de xblood pour xpid = 1xcaccess_type not in (288,289,292) il est toujours inclus.

+0

Pouvez-vous expliquer mieux s'il vous plaît? accès initial/actuel? Qu'est-ce que cela signifie et qu'est-ce que c'est? Ce code semble bon pour ce que vous voulez réaliser à mon avis – Furtiro

+0

Vous devez inclure un exemple de tableau avec ce que vous voulez pour la sortie de l'échantillon. Cela nous donne un meilleur contexte. – CodyMR

+0

Ajout d'un peu plus d'infos. Faites-moi savoir si je peux effacer quoi que ce soit d'autre. – Jackson

Répondre

0

Si vous ne souhaitez pas écrire de procédure stockée ou de code SQL personnalisé pour gérer cela, vous pouvez ajouter un autre groupe. En supposant que votre groupe le plus profond (celui le plus proche de la section Détails) est tri basé sur xpid, vous pouvez ajouter un groupe à l'intérieur de celui qui trie le xcaccess_type du plus bas au plus haut.

supprimons l'en-tête et pied de page pour le nouveau groupe, puis ajouter cette clause à la section Détails:

({d11.xpid} = PREVIOUS({d11.xpid}) 
OR 
({d11.xcaccess_type} in [288, 289, 292]) 

Cela devrait modifier votre rapport pour afficher uniquement jamais les enregistrements avec la valeur d'accès plus bas par personne. Et si la valeur d'accès la plus basse est l'une des trois valeurs interdites, aucun enregistrement ne sera affiché pour ce xpid.

+1

Merci pour votre aide, en ajoutant le regroupement 'xcaccess_type' dans le groupe' xpid' était la pièce manquante! – Jackson