J'ai une table avec 10 colonnes. Je veux retourner toutes les lignes pour lesquelles Col006 est distinct, mais renvoie toutes les colonnes ...
Comment puis-je faire cela? P>
Si la colonne 6 apparaît comme suit: P>
| Column 6 | | item1 | | item1 | | item2 | | item1 |
7 Réponses :
create table #temp (C1 TINYINT, C2 TINYINT, C3 TINYINT, C4 TINYINT, C5 TINYINT, C6 TINYINT) INSERT INTO #temp SELECT 1,1,1,1,1,6 UNION ALL SELECT 1,1,1,1,1,6 UNION ALL SELECT 3,1,1,1,1,3 UNION ALL SELECT 4,2,1,1,1,6 SELECT * FROM #temp SELECT * FROM( SELECT ROW_NUMBER() OVER (PARTITION BY C6 Order by C1) ID,* FROM #temp )T WHERE ID = 1
Cela renvoie toutes les enregistrements aussi ... à l'aide de MS SQLSERVER, et le champ est Varchar (255)
Le tentable a 1500 enregistrements (hors des enregistrements de 10000 originaux).
Cela fait la même chose que juste sélectionner * à partir de la table code>.
Le mot clé "distinct" en SQL a la signification de "valeur unique". Lorsqu'elle est appliquée sur une colonne dans une requête, elle reviendra autant de lignes du résultat définies car il existe des valeurs différentes, différentes pour cette colonne. En conséquence, il crée un ensemble de résultats groupé et les valeurs d'autres colonnes sont aléatoires sauf si définies par d'autres fonctions (telles que Max, min, moyenne, etc.) P>
Si vous vouliez dire que vous voulez renvoyer toutes les lignes pour lesquelles COL006 a une valeur spécifique, utilisez la clause "Où COL006 = VALUE". p>
Si vous vouliez dire que vous voulez retourner toutes les lignes pour lesquelles COL006 est différente de toutes les autres valeurs de COL006, vous devez toujours spécifier ce que cette valeur est => voir ci-dessus. P>
Si vous voulez dire que la valeur de COL006 ne peut être évaluée que lorsque toutes les lignes ont été récupérées, utilisez la clause "Ayant COL006 = VALUE". Cela a le même effet que la clause "où", mais "où" est appliquée lorsque des lignes sont extraites des tables brutes, tandis que "avoir" est appliqué une fois que tous les autres calculs ont été effectués (c.-à-d. Les fonctions d'agrégation ont été exécutées, etc.) et juste avant que l'ensemble de résultats ne soit renvoyé à l'utilisateur. P>
Après avoir vu votre édition, je dois souligner que si vous utilisez l'une des autres suggestions, vous vous retrouverez avec des valeurs aléatoires dans toutes les 9 autres colonnes pour la ligne contenant la valeur "Item1" dans Col006, due à la contrainte plus loin dans mon post. p>
Je me fiche de quelle valeur unique de Col006 ... J'ai juste besoin d'une instance. Mais il y a plus de 5000 valeurs différentes pour COL006. Comment puis-je préciser cela?
Vous pouvez grouper sur Vous pouvez utiliser des agrégats pour choisir une valeur de les enregistrements. Exemple: p> Si vous souhaitez que les valeurs proviennent d'un enregistrement spécifique de chaque groupe, vous devez l'identifier d'une manière ou d'une autre. Exemple d'utilisation de COL002 pour identifier l'enregistrement dans chaque groupe: P> COL006 code> pour obtenir les valeurs distinctes, mais vous devez alors décider quoi faire avec les multiples enregistrements de chaque groupe. select Col006, Col001, Col002
from TheTable t
inner join (
select Col006, min(Col002)
from TheTable
group by Col006
) x on t.Col006 = x.Col006 and t.Col002 = x.Col002
order by Col006
in in Vérifiez votre version de la base de données et votre niveau de compatibilité: P> SQL Server 2005 Code> et ci-dessus: SQL Server 2000 code>, à condition que vous avez une colonne de clé primaire: SELECT @@VERSION
SELECT COMPATIBILITY_LEVEL
FROM sys.databases
WHERE name = DB_NAME()
Cela me donne: serveur: msg 156, niveau 15, état 1, ligne 2 Syntaxe incorrecte près du mot clé "avec". Serveur: MSG 195, niveau 15, État 1, ligne 4 'Row_Number' n'est pas un nom de fonction reconnu.
@Ninjacat: quelle version de SQL Server code> utilisez-vous?
@Ninjacat: Pourriez-vous s'il vous plaît préparer avec code> avec un point-virgule et réessayer? Si cela échoue, pourriez-vous poster votre requête exactement comme vous l'exécutez?
J'allais poster des réponses très similaires. - mon échec.
SELECT * FROM (SELECT DISTINCT YourDistinctField FROM YourTable) AS A CROSS APPLY ( SELECT TOP 1 * FROM YourTable B WHERE B.YourDistinctField = A.YourDistinctField ) AS NewTableName I tried the answers posted above with no luck... but this does the trick!
select * from yourTable where column6 in (select distinct column6 from yourTable);
Vous pouvez utiliser permet de dire que vous avez code> comme le code> Code> primaire_key code>.
Et nous voulons obtenir tous les valeurs code> distincts > pour une colonne permet de dire groupe par code> et min () code> pour obtenir le résultat. estimé_total code>, et vous avez également besoin d'un échantillon de ligne complète avec chaque valeur distincte dans SQL fort>. La requête suivante devrait faire le tour. P>
"COL006 est distinct" - comparé à quoi?
COL006 a une valeur donc distincte où qu'elle apparaisse. Voulez-vous vraiment dire "Sélectionnez COL006 distinct de l'onglet comptant (*) = 1".
En fait, qu'entendez-vous par là, exactement?
OK, distinct n'est clairement pas le bon outil à utiliser dans cette situation ....
Comment savez-vous quelle ligne 1 ligne à ramener?
Dans ce cas particulier, peu importe.