2010-12-06 6 views
0

J'ai couru la simple requête suivante qui ressemble à l'exemple ci-dessous: (En bref, un ordre a de 1 à N éléments et la clé étrangère est ORDER_ID dans les articles de table)Access 2007 jointure gauche et nulls

SELECT orders.*, items.* 
FROM orders 
LEFT JOIN 
items ON orders.id= items.order_id 

Cela montre quelque chose comme:

order.id item.id 
    1   34 
    1   22 
    1   90 
    2   44 
    2   19 
    2   21 
    2   22 

Je veux une sortie comme:

order.id item.id 
    1   34 
       22 
       90 
    2   44 
       19 
       21 
       22 

Comment pour atteindre cela sur Access 2007?

Nous vous remercions à l'avance, B. Miloud

+0

1) Pourquoi voulez-vous faire cela? 2) Quelle est la logique qui dicte l'ordre de 'item.id'? Peut-il être arbitraire? Par exemple, est-ce que 1 pourrait être apparié avec «22» et non «34»? –

+0

L'identifiant de l'article n'a pas d'importance, c'est juste un numéro que je montre. Je veux faire cela pour fournir à l'utilisateur une sortie plus lisible. Thx – CoolStraw

+3

Ce que vous voulez faire est de changer l'affichage dans l'interface utilisateur, pas la requête sql. Affichez-vous les résultats sur un formulaire ou un rapport? Vous ne pouvez pas (ne devriez pas) le faire dans la requête elle-même. – Bill

Répondre

1

La seule façon que je peux penser à faire ce serait une auto se joindre à un agrégat. Ce sera plus facile/mieux géré dans votre application.

SELECT 
     IIF(i2.id = MIN(i.id), i.order_id, NULL) AS order_id, 
     i2.id AS item_id 
FROM  items i 
     INNER JOIN orders o 
     ON  o.id= i.order_id 
     LEFT JOIN items i2 
     ON  i2.order_id=i.order_id 
GROUP BY i.order_id 
ORDER BY i.order_id, 
     i2.id 
+2

Les tags disent ms-access, CASE ne fonctionnera pas. – Fionnuala

+2

Merci pour le pourboire! Tour brillant;). @Remou: Case doit devenir IIF et ça marche parfaitement! – CoolStraw