2009-01-22 3 views

Répondre

8

Essayez ceci:

SELECT su.Name, COUNT(ui.ID) 
FROM systemUsers su 
LEFT JOIN userIncidences ui ON ui.idUser = su.ID 
GROUP BY su.Name 

[Edit:]
J'avais initialement un INNER JOIN comme Tomalak, mais je me suis aperçu que cela exclurait les utilisateurs sans incidents, plutôt que de les montrer avec un 0 nombre . Cela pourrait même être ce que vous voulez, mais cela ne correspond pas à votre original.

+0

mien supprimé, il n'y aurait rien d'avoir deux réponses identiques – Tomalak

+0

Salut Tomalak, au moins je l'aurais upvoted. Merci aussi :) –

10

Il existe des cas dans lesquels vous ne pouvez pas éviter une sous-requête, par exemple si vous devez inclure des colonnes calculées qui utilisent des données de la ligne en cours et de la ligne précédente. Considérez cette requête, par exemple:

SELECT  
    (Current.Mileage - Last.Mileage)/Quantity as MPG 
FROM   
    GasPurchases AS Current 
    LEFT OUTER JOIN GasPurchases AS Last 
    ON Last.Date = 
     (SELECT MAX(PurchaseDate) 
     FROM GasPurchases 
     WHERE PurchaseDate < Current.PurchaseDate) 

Il provoquera une erreur d'analyse:

SQL Execution Error.

Error Source: SQL Server Compact ADO.NET Data Provider Error Message: There was an error parsing the query.

Je trouve this thread sur MSDN qui a une solution de contournement. En modifiant la sous-requête pour qu'elle renvoie un ensemble au lieu d'une valeur scalaire, j'ai pu enregistrer et exécuter la requête suivante.

SELECT  
    (Current.Mileage - Last.Mileage)/Quantity as MPG 
FROM   
    GasPurchases AS Current 
    LEFT OUTER JOIN GasPurchases AS Last 
    ON Last.Date IN 
     (SELECT MAX(PurchaseDate) 
     FROM GasPurchases 
     WHERE PurchaseDate < Current.PurchaseDate) 
+0

Merci, j'ai trouvé cela très utile :-) Je ne peux cependant pas obtenir une sous-requête basée sur un ensemble pour travailler dans le style suivant "SELECT Consultant.Id, Consultant.Firstname, Consultant.Lastname FROM (SELECT ID, Prénom, Nom FROM Consultant_Consultant) AS Consultant ". Est-ce que je fais quelque chose de mal? Ou ce style de requête ne fonctionne-t-il pas dans SQL CE? –

+0

Il s'agit d'une requête imbriquée et non d'une sous-requête. Je ne suis pas sûr des limites de CE. Votre exemple ne fait rien, donc je ne peux pas suggérer une solution de contournement. – cdonner

0

Merci les gars, DoctaJonez, j'ai trouvé votre petit message le plus utile avec ma sous-requête. Votre syntaxe semble fonctionner avec SQL Server Compact v3.5. Voici la requête que j'ai essayée (qui fonctionne).

Par ailleurs, la valeur hardcoded que vous voyez (38046), je sais au moment de l'exécution de la requête

insert into tLink (start,stop,associativeobject,linktype,id,name,guid,createTime,modifyTime,externalID,description,linkLabel,LinkDetails) 
select newtable.id,stop,associativeobject,linktype,newtable.id,name,guid,createTime,modifyTime,externalID,description,linkLabel,LinkDetails from tLink l, (select id, '38046' as newid from tObject Where name = 'Step 1' and id <> '38046') as newtable 
where l.start = newtable.newid and start in (38046) 
-1

Quelque chose comme ça? (À l'aide Northwind.Order Détails]

Le Code Snippet:

SELECT  [Unit Price] * Quantity AS Cost, 

[Unit Price] * Quantity * 1.25 AS CostWithVAT 
FROM   [Order Details] 

Source Airline Reservation System Project