2010-10-13 22 views
2

Je suis assez sûr que c'est une chose facile à faire, mais je suis un débutant à SQL alors soyez gentils. Si je veux écrire une requête, cela ajoute les occurrences totales de chaque numéro de processus et stocke ces valeurs dans une nouvelle colonne, que dois-je faire? Je pensais qu'un mélange de count (distinct ...) pourrait l'abattre mais je ne suis pas sûr. Voir le tableau des résultats pour ce que je cherche.Sélection d'un ensemble de valeurs distinctes et les compter individuellement dans de nouvelles colonnes

 
Order_Table: 

order_number  process 
     100   8 
     100   7 
     100   7 
     100   6 
     100   5 
     105   6 
     105   2 
     105   4 

Results: 

order_num NumOfEight NumOfSeven NumOfSix NumOfFive NumOfFour NumOfTwo 
     100    1   2   1   1   0   0 
     105    0   0   1   0   1   1 


Mise à jour: J'utilise SQL 2005 comme base, mais j'ai accès à des versions plus récentes. Le processus est un ensemble fini de valeurs.

Répondre

2

En supposant SQL Server 2005+ vous pouvez utiliser PIVOT

SELECT 
     order_num, [8] AS NumOfEight, [7] AS NumOfSeven /* etc. etc.*/ 
FROM 
     (SELECT order_number AS order_num, process FROM Order_Table) p 
PIVOT 
     (COUNT(process) FOR process IN ([8],[7] /* etc. etc.*/)) pvt 
+0

C'est une solution élégante. – npeterson

1
select order_num, 
     sum(case when process = 8 then 1 else 0 end) as NumOfEight, 
     sum(case when process = 7 then 1 else 0 end) as NumOfSeven, 
     sum(case when process = 6 then 1 else 0 end) as NumOfSix 
     /* Repeat as many times as needed */ 
    from Order_Table 
    group by order_num 
+0

pour cette réponse Thankyou ainsi. C'est plus proche de mon essai original, mais je n'ai pas envisagé de forcer la valeur à 1 ou à 0 et de la sommer. – npeterson

+1

@npeterson: Content de vous aider. Vous pourriez dire «merci» avec un vote up (pour les deux réponses). :-) –