2008-12-09 12 views
1

La structure de la table de données est la suivante:
id1, id2, id3, id4, ... (certains autres champs).
Je souhaite créer une requête récapitulative pour déterminer le nombre de fois qu'une valeur d'ID est utilisée dans chaque colonne.Requête récapitulative de plusieurs champs dans SQL

données
1,2,3,4,2008
2,3,5,1,2008
1,3,2,5,2007
1,2,3,6,2007
3,1,2,5,2007

Pour la valeur 1, le résultat devrait être
1,0,0,1,2008
2,1,0,0,2007

Comment accomplir t son avec une requête (en MySQL).

+0

quelque raison que vous ne pouvez faire une requête? Je ** est beaucoup plus simple si vous venez d'utiliser 4 requêtes de comptage (*) et de rassembler les totaux dans le code. – hometoast

+0

Je veux afficher les informations dans DBGrid :) – Riho

Répondre

1

Cela semble être la meilleure solution (de Wiki):

select years, 
sum(1*(1-abs(sign(id1-56)))) as id1, 
sum(1*(1-abs(sign(id2-56)))) as id2, 
sum(1*(1-abs(sign(id3-56)))) as id3, 
sum(1*(1-abs(sign(id4-56)))) as id4, 
from mytable 
group by years 
1

Utilisez une fonction caractéristique ou delta:

DECLARE @look_for AS int 
SET @look_for = 1 

SELECT SUM(CASE WHEN id1 = @look_for THEN 1 ELSE 0 END) AS id1_count 
    ,SUM(CASE WHEN id2 = @look_for THEN 1 ELSE 0 END) AS id2_count 
    ,SUM(CASE WHEN id3 = @look_for THEN 1 ELSE 0 END) AS id3_count 
    ,SUM(CASE WHEN id4 = @look_for THEN 1 ELSE 0 END) AS id4_count 
FROM tbl 

Il y a plusieurs façons de générer du code ce (également une technique utilisant PIVOT et UNPIVOT dans SQL Server qui n'est pas ANSI) en fonction de votre table et les valeurs d'identité distinctes aussi.

+0

+1 Cade. Riho est un Mysql'er et ne comprendra pas. –

+0

Ajouter un groupe par année pour l'exhaustivité. –

-1

Si X est la valeur d'identifiant que vous recherchez, vous feriez quelque chose comme ça.

select (select count(*) where id1 = X) as countid1 ... etc 
0

sélectionner

(comptage de sélection (id1) à partir de t1 où id1 = Sparam) comme id1,

(comptage de sélection (ID2) à partir de t2 où ID2 = Sparam) comme ID2

+0

À moins que votre table ne soit indexée individuellement sur eash des colonnes id et sparse, la version de la fonction caractéristique (qui a été rejetée) sera plus performante dans la majorité des cas, car elle effectuera plusieurs analyses de table. –