Je peux effectuer la sélection suivante SQL Server de noms distincts (ou non répétitifs) d'une colonne d'une table comme suit: mais si j'ai plus d'une table ( Toutes ces tables contiennent le champ Nom appelé [nom]) et je dois connaître le nombre de noms non répétés dans deux tables ou plus dans deux tables ou plus. P> Si je rencontre quelque chose comme ça: P> SELECT COUNT(DISTINCT [Name]) FROM [MyTable1], [MyTable2], [MyTable3]
4 Réponses :
Après la clarification, utilisez:
SELECT x.name, COUNT(DISTINCT x.[name]) FROM (SELECT [name] FROM [MyTable] UNION ALL SELECT [name] FROM [MyTable2] UNION ALL SELECT [name] FROM [MyTable3]) x GROUP BY x.name
Je pense que vous avez couvert toutes les options maintenant :) +1
Et, le syndicat tout est la bonne façon d'aller, peu importe quelle solution est utilisée :)
Les gars, je m'excuse de vous tromper. Je vais juste apprendre SQL. Je vais aussi curieux, ce code va-t-il gérer des noms dans une matière sensible à la casse, c'est-à-dire que "John" et "John" comptent comme 2, ou comme 1?
@ AHMD0 - La sensibilité à l'analyse est basée sur les paramètres de collation de votre serveur.
Nombre (distinct ...) code> sur la touche de regroupement entraînera toujours
1 code>.
Edit: Dû changer après avoir vu récemment commentaire.
Cela vous donne-t-il ce que vous voulez? Cela donne un compte pour chaque personne après avoir combiné les rangées de toutes les tables. P>
SELECT [NAME], COUNT(*) as TheCount FROM ( SELECT [Name] FROM [MyTable1] UNION ALL SELECT [Name] FROM [MyTable2] UNION ALL SELECT [Name] FROM [MyTable3] ) AS [TheNames] GROUP BY [NAME]
Voici un autre moyen:
SELECT x.name, SUM(x.cnt) FROM ( SELECT [name], COUNT(*) AS cnt FROM [MyTable] GROUP BY [name] UNION ALL SELECT [name], COUNT(*) AS cnt FROM [MyTable2] GROUP BY [name] UNION ALL SELECT [name], COUNT(*) AS cnt FROM [MyTable3] GROUP BY [name] ) AS x GROUP BY x.name
Si vous avez Et vous souhaitez compter la quantité de valeurs distinctes de différents noms de colonnes, ce qu'elle m'a été utile dans athenasql strong> était d'utiliser retournerait une table avec une rangée et leurs comptes: P>
croix rejoindre code> car Votre sortie serait une seule ligne, il ne serait que 1 combinaison: p>
amt_name1 | amt_name2 | amt_name3 | amt_name4 | amt_name5 | amt_name6
4123 | 675 | 564 | 2346 | 18667 | 74567
Voulez-vous compter depuis les trois tables? Ou juste de l'un d'eux?
Qu'entendez-vous par «noms non répétitifs»?
OK, disons, la colonne [Nom] de MyTable1 a des valeurs: "John", "Mary", "John", "Aaron". La colonne [Nom] MyTable2 a des valeurs: "Mary", "Aaron", "Aaron", "Marie". La colonne [Nom] de MyTable3 a des valeurs: "John", "Mary", "John", "John". J'ai besoin d'obtenir le compte, tel que: "John" = 5 fois, "Mary" = 4 fois, "Aaron" = 3 fois.