2012-02-15 5 views
1

J'ai une question concernant le comptage de plusieurs champs dans la même rangée dans la même table. Le moyen le plus simple de montrer ce dont j'ai besoin est de donner un exemple. J'ai report_number, writer1, loc1, writer2, loc2 colonnes. Vous pouvez appeler ma table report_master. Ma table ressemble à ceci:Nombre de champs multiples même ligne - SQL

 
    Report_Number, writer1, loc1, writer2, loc2 
    1    123   1  456   2  
    2    456   2  789   3 
    3    789   3  123   1  
    4    789   3  123   1  
    5    456   2  789   3  
    6    123   1  456   2  
    7    123   1  789   3  
    8    456   2  123   1  
    9    789   3  123   1  
    10    123   1  456   2 

SORTIE:

 
    Reports, writer 
    8   123  
    6   456  
    6   789 

Je l'ai essayé et essayé et ne peut pas comprendre la requête pour obtenir le nombre de rapports qu'un écrivain a été impliqué. L'auteur obtiendra le crédit pour un rapport s'ils sont dans les champs d'écrivain1 ou d'auteur2. Je voudrais baser ma question sur une plage de dates et la loc. Donc si j'entre une plage de dates (cette table a un champ de date) et un loC# (inclut la recherche de loc1 et de loc2), j'obtiendrai quelque chose qui ressemble à la table de résultats.

Merci d'avance pour votre aide. Je vais l'utiliser dans SQL SSRS.

Répondre

1
SELECT COUNT(*) AS Reports, q.writer 
    FROM (SELECT writer1 AS writer 
       FROM YourTable 
       WHERE loc1 = 1 
      UNION ALL 
      SELECT writer2 AS writer 
       FROM YourTable 
       WHERE loc2 = 1) q 
    GROUP BY q.writer 
+0

Merci beaucoup! J'ai utilisé ton exemple et ça a marché comme un charme! – user1212436

0

La plus directe aller de l'avant est de faire un compte de l'union d'un select de chaque champ écrivain

SELECT COUNT(report_number) reports, 
     writer 
FROM (SELECT report_number, 
       writer1 as writer 
     FROM table 
     UNION ALL 
     SELECT report_number 
       writer2 as writer 
     FROM table) t 
GROUP BY writer 

Une autre option est d'utiliser le UNPIVOT article, mais son seul vaut vraiment la peine si votre SELECTs UNION Aren » t trivial

SELECT COUNT(report_number), 
     writer 
FROM (SELECT report_number, 
       writer1, 
       writer2 
     FROM reports) p UNPIVOT (writer FOR writer_type IN (writer1, writer2) 
     )AS 
     unpvt 
GROUP BY writer 

Voir working sample here

Questions connexes