2009-07-29 6 views
2

J'essaie de compter le nombre de lignes qui ont des valeurs distinctes dans les deux colonnes "a" et "b" de ma base de données Sybase ISQL 9.Comptage des lignes de plusieurs colonnes distinctes

Ce que je signifie est, l'ensemble de données suivante produira la réponse "4":

a b

1 9 2 9 3 8 3 7 2 9 3 7

Quelque chose comme la syntaxe suivante serait bien:

SELECT COUNT(DISTINCT a, b) FROM MyTable 

Mais cela ne travail.

J'ai une solution:

SELECT COUNT(*) FROM 
    (SELECT a, b 
    FROM MyTable 
    WHERE c = 'foo' 
    GROUP BY a, b) SubTable 

Mais je me demandais s'il y a un moyen plus propre de construire cette requête?

+0

Qu'est-ce que "c = 'foo'" –

+0

c = 'foo' était juste –

Répondre

2

Vous pouvez concaténer a et b ensemble dans 1 chaîne comme celui-ci (TSQL, espérons quelque chose de très similaire dans Sybase:

SELECT COUNT(DISTINCT(STR(a) + ',' + STR(b))) 
FROM @YourTable 
+2

Cela ne fonctionnerait pas si a ou b sont des colonnes contenant des virgules – soulmerge

+0

un délimiteur pourrait être utilisé ... quelque chose comme "{RANDOM_DELIM}" Il suffit de décider d'un délimiteur approprié – AdaTheDev

+0

Les données qui m'intéressent sont stockées en tant qu'ints donc cette méthode fonctionne - je viens de la tester ! –

3

Que diriez-vous:

SELECT COUNT(*) 
FROM (SELECT DISTINCT a, b FROM MyTable) 

Pour plus d'informations sur la raison pour laquelle cela ne peut se faire d'une manière plus simple (en plus des chaînes concaténer comme indiqué dans une réponse différente), vous pouvez vous référer à la présente Google Réponses après : Sql Distinct Count.

Questions connexes