2010-03-18 7 views
2

Je fais un rapport au travail qui regarde 5 colonnes qui contiennent toutes v1aa, v1ab et v1ac.T Question de compte SQL

Ce que je veux faire est de compter tout le v1aa dans les 5 colonnes et afficher les résultats (et la même chose pour v1ab et v1ac)

Un exemple de la façon dont je l'aime à afficher comme est la suivante : -

Amber = 3 (v1aa code) 
Blue = 2 (v1ab code) 
Red = 1 (v1ac code) 

Quelqu'un pourrait-il me donner des conseils pour me lancer?

+0

Pourriez-vous poster des exemples de données? – amelvin

Répondre

0

Est-ce ce que vous cherchez?

SELECT 
    SUM((CASE WHEN Column1 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column2 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column3 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column4 = 'v1aa' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column5 = 'v1aa' THEN 1 ELSE 0 END)) 
    AS Amber, 
    SUM((CASE WHEN Column1 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column2 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column3 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column4 = 'v1ab' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column5 = 'v1ab' THEN 1 ELSE 0 END)) 
    AS Blue, 
    SUM((CASE WHEN Column1 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column2 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column3 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column4 = 'v1ac' THEN 1 ELSE 0 END) 
     + (CASE WHEN Column5 = 'v1ac' THEN 1 ELSE 0 END)) 
    AS Red 
FROM 
    dbo.MyTable 
0

Je pense que cela vous aidera à démarrer. Vous devrez peut-être ajouter une clause WHERE si les valeurs NULL sont possibles ou si des codes supplémentaires sont possibles dans les données que vous ne souhaitez pas afficher dans votre rapport.

SELECT CASE i.code 
    WHEN 'v1aa' THEN 'Amber' 
    WHEN 'v1ab' THEN 'Blue' 
    WHEN 'v1ac' THEN 'Red' END, 
    COUNT(*) 
FROM 
(
    SELECT Col1 AS Code FROM Test 
    UNION ALL SELECT Col2 FROM Test 
    UNION ALL SELECT Col3 FROM Test 
    UNION ALL SELECT Col4 FROM Test 
    UNION ALL SELECT Col5 FROM Test 
) i 
GROUP BY i.Code 
0

Si vous voulez que ces comptes pour chaque enregistrement, essayez:

Select 
    Case When Col1 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col2 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col3 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col4 Like '%v1aa%' Then 1 Else 0 End + 
    Case When Col5 Like '%v1aa%' Then 1 Else 0 End As AmberCount, 
    Case When Col1 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col2 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col3 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col4 Like '%v1ab%' Then 1 Else 0 End + 
    Case When Col5 Like '%v1ab%' Then 1 Else 0 End As BlueCount, 
    Case When Col1 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col2 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col3 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col4 Like '%v1ac%' Then 1 Else 0 End + 
    Case When Col5 Like '%v1ac%' Then 1 Else 0 End As RedCount 
From MyTable 

Si vous voulez les chiffres correspondant à la table entière puis ajoutez une fonction d'agrégation Sum(), comme Timothy Khouri a suggéré dans son answer

+0

Hiya Guys Timothy Khouri - merci le vôtre a travaillé :) – user296146