2010-07-07 16 views
0

J'ai une table avec 5 colonnes: ID, Session1, Session2, Session3, Session4. Ce que je veux faire est d'afficher le nombre de mêmes éléments de chaque colonne. Le même article ne peut pas apparaître dans plus d'une colonne.Comment compter les enregistrements de plusieurs colonnes en utilisant sql et asp.net?

ID Session1 Session2 Session3 Session4 
-- -------- -------- -------- -------- 
1 Music  Web  Tech  Future 
2 Art  Articles Search  Introduction 
3 Music  Books  Camera  Phone 
4 Music  Glass  Cup  Future 
5 Art  Books  Tech  Future 
6 Music  Glass  Cup  Phone 

Je veux l'afficher comme ça sur une page asp.net.

Musique: 4
Art: 2
Web: 1
Articles: 1
Livres: 2
verre: 2
Tech: 2
Recherche: 1
Appareil photo: 1
Coupe: 2
Avenir: 3
introduction: 1
Téléphone: 2

Comment puis-je construire une requête sql et les afficher sur asp.net?

+0

pouvez-vous fixer votre mise en forme? ou quelqu'un d'autre avec rep plus élevé le fixer? –

+0

De plus, sur quel serveur/version est-ce que cela fonctionne? –

+0

Le même article peut-il apparaître dans plusieurs colonnes? Ils ne le font pas dans votre exemple, mais je veux m'assurer. –

Répondre

1

Vous pouvez simplement utiliser:

SELECT 
    session1, 
    COUNT(*) 
FROM 
    My_Table 
GROUP BY 
    session1 
UNION ALL 
SELECT 
    session2, 
    COUNT(*) 
FROM 
    My_Table 
GROUP BY 
    session2 
... 
+0

Envelopper dans un select avec un ORDER BY, et vous avez terminé! –

+0

Je ne peux pas vraiment discerner une commande dans ses résultats d'échantillon. Si elle est triée par colonne, vous devez ajouter une valeur codée en dur à chaque sélection pour que vous sachiez d'où elle provient. –

+0

Comment puis-je afficher un nombre total pour chaque élément comme dans mon exemple? – codeLearner

1

Avec SQL Server, vous pouvez faire quelque chose comme ceci:

SELECT Session, COUNT(*) FROM (
    SELECT Session1 AS Session FROM TableName 
    UNION ALL 
    SELECT Session2 AS Session FROM TableName 
    UNION ALL 
    SELECT Session3 AS Session FROM TableName 
    UNION ALL 
    SELECT Session4 AS Session FROM TableName) T1 
    GROUP BY Session 

Ce n'est pas assez, mais cela devrait fonctionner.

0

essayer:

Select z.Val, Count(*) ValueCount 
    From (Select Distinct session1 val From Table Union 
      Select Distinct session2 val From Table Union 
      Select Distinct session3 val From Table Union 
      Select Distinct session4 val From Table) Z 
    Join Table t on Z.Val In (t.Session1, t.Session2, t.Session3, t.Session4) 
    Group By z.Val