2011-09-28 6 views
4

j'ai le tableau suivant:MySQL valeurs distinctes à travers des colonnes

 
id lb  rb  ls  rs  ch  bk  ot 
1 10000 10001 10001 10001 10001 10001 10000 
2  0 10000  0 10001  0 10000  0 
3  0  0 10000 10001 10000  0  0 
4  0  0  0 10000  0  0  0 
5  0  0  0 10000  0  0  0 

Je veux être en mesure d'obtenir les valeurs distinctes totales dans toutes les colonnes (sauf 0) de sorte que le résultat est en tant que tel:

 
Code Qty 
10000 8 
10001 7 

Quelle est la manière la plus facile/la meilleure de faire cela?

Merci, Stu

Répondre

1

Vous pouvez faire

SELECT col1, COUNT(*) 
FROM 
    (
    SELECT lb AS col1 
    FROM table 
    UNION ALL 
    SELECT rb 
    FROM table 
    UNION ALL ... etc 
) a 
WHERE col1 != 0 
GROUP BY col1 

Au lieu de WHERE col1 != 0 vous pouvez ajouter WHERE field_name !=0 à chaque SELECT dans UNION

+0

Je crains que ce soit jeter l'erreur 'Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de) WHERE col1! = 0 GROUP BY col1 '' –

+0

Vous avez modifié son EXAMPLE, non? – JNDPNT

+0

bien sûr !!!!!! –

0
SELECT code  AS Code 
    , SUM(cnt) AS Qty 
FROM 
    ( SELECT lb AS code 
      , COUNT(*) AS cnt 
     FROM TableX 
     GROUP BY lb   
    UNION ALL 
     SELECT rb AS code 
      , COUNT(*) AS cnt 
     FROM TableX 
     GROUP BY rb 
    UNION ALL   
    ... 
    UNION ALL 
     SELECT ot AS code 
      , COUNT(*) AS cnt 
     FROM TableX 
     GROUP BY ot 
) AS tmp 
GROUP BY code 
+0

Merci, mais je reçois 'Chaque table dérivée doit avoir son propre alias' erreur avec ceci :( –

+0

Essayez maintenant J'ai ajouté des parenthèses à la bonne place.La seule chose que je n'ai pas mis est le' WHERE col <> 0' –

Questions connexes