Nombre de lignes distinctes sans utiliser de sous-requête

Dire que j'ai Table1 qui a des lignes dupliquées (oubliez le fait qu'il n'a pas de key primaire …) Est-il possible de réécrire ce qui suit sans utiliser un JOIN, sous-requête ou CTE et sans avoir à épeler les colonnes dans quelque chose comme un PAR GROUPE?

SELECT COUNT(*) FROM ( SELECT DISTINCT * FROM Table1 ) T1 

Non, ce n'est pas possible.

Si vous êtes limité par votre framework / query tool / quelquechose, vous ne pouvez pas utiliser une sous-requête, et vous ne pouvez pas épeler chaque nom de colonne dans GROUP BY, vous êtes SOL.

Si vous n'êtes pas limité par votre framework / query tool / any, il n'y a aucune raison de ne pas utiliser une sous-requête.

Vous pouvez faire quelque chose comme ça.

 SELECT Count(DISTINCT ProductName) FROM Products 

mais si vous voulez un nombre d'loggings complètement distincts, vous devrez utiliser l'une des autres options que vous avez mentionnées.

Si vous vouliez faire quelque chose comme vous l'avez suggéré dans la question, cela impliquerait que vous ayez des loggings en double dans votre tableau.

Si vous n'avez pas d'loggings en double, SELECT DISTINCT * from table sera le même sans le caractère distinct.

Si vous voulez vraiment faire cela, vous pouvez juste "SELECT COUNT (*) FROM table1 GROUP BY tous, colonnes, ici" et prendre la taille du jeu de résultats en tant que votre nombre.

Mais ce serait un code digne de tous les jours;)

Je voulais juste affiner la réponse en disant que vous devez vérifier que le type de données des colonnes est comparable – sinon vous obtiendrez une erreur en essayant de les rendre DISTINCT:

Exemple: com.microsoft.sqlserver.jdbc.SQLServerException: Le type de données ntext ne peut pas être sélectionné comme DISTINCT car il n'est pas comparable.

Ceci est vrai pour les grandes colonnes binarys, xml et autres en fonction de votre RDBMS – rtm. La solution pour SQLServer par exemple est de le faire passer d'un ntext à un nvarchar (MAX) à partir de SQL Server 2005.

Si vous vous en tenez aux colonnes PK alors vous devriez être OK (je ne l'ai pas vérifié moi-même mais j'aurais logiquement pensé que les colonnes PK devraient être comparables)