2012-01-29 6 views
-1

J'utilise SQL Server 2008, C#, j'ai une table qui contient environ 20000 lignes, j'ai plusieurs lignes similaires dans ce tableau, il y a environ 900 lignes distinctes, c'est ma structure de table:SQL Server étrange requête distincte

tblCourse

courselevel, coursecode, coursename, branchcode... 

par exemple, j'ai 20 lignes avec le même coursecode/coursename mais avec différents branchcode ou courselevel, je vais avoir une table qui contient un objet avec seulement coursecode unique.

est ici un petit échantillon de ma table:

... courselevel=1,coursecode=1200,coursename=A,branchcode=200... 
... courselevel=2,coursecode=1200,coursename=A,branchcode=200... 
... courselevel=1,coursecode=1200,coursename=A,branchcode=220... 
... courselevel=1,coursecode=1200,coursename=A,branchcode=230... 
... courselevel=1,coursecode=1200,coursename=A,branchcode=240... 
... courselevel=1,coursecode=1200,coursename=A,branchcode=250... 
... courselevel=2,coursecode=1200,coursename=A,branchcode=251... 
... courselevel=1,coursecode=1200,coursename=A,branchcode=225... 

Je veux avoir seule la première ligne:

... courselevel=1,coursecode=1200,coursename=A,branchcode=200... 

parce que toutes les lignes ont coursecode similaires,

Que dois-je faire?

Comment écrire ma chaîne de requête de sélection?

J'ai testé différentes méthodes (group by, distinct, max (ID) ...) sans aucune chance, aidez-moi!

grâce

+4

Veuillez fournir des exemples de données et la sortie désirée. – RedFilter

+0

OK donc vous avez cette table avec 20'000 lignes - et ** que ** voulez-vous en extraire ?? Vous n'êtes pas très clair sur ce que votre objectif est, quel type de données que vous voulez sortir de votre table ... s'il vous plaît reformuler et montrer des échantillons –

+0

oh oui j'ai mis à jour ma question, j'espère que ça peut aider, je vous voulez avoir seulement des enregistrements qui ont un code de cours unique –

Répondre

1

Vous pouvez GROUP BY les colonnes similaires et utiliser tout Aggregate Function sur les autres colonnes pour les faire revenir un seul enregistrement. Ce cette valeur dépend entièrement de la fonction d'agrégation que vous utilisez.

Aggregate Functions

Les fonctions d'agrégat effectuer un calcul sur un ensemble de valeurs et renvoient une valeur unique. À l'exception de COUNT, les fonctions agrégées ignorent les valeurs nulles . Les fonctions d'agrégation sont fréquemment utilisées avec le GROUP BY clause de l'instruction SELECT

Dans cet exemple, je l'ai utilisé le min/max et MOY des fonctions d'agrégation.

SELECT courselevel 
     , coursecode 
     , coursename 
     , MIN(branchcode) 
     , MAX(othercolumn) 
     , AVG(numberColumn) 
     , ... 
FROM yourTable 
GROUP BY 
     courselevel 
     , coursecode 
     , coursename 
+0

oh merci je teste votre code, j'espère que ça marche! –

+0

J'utilise cette requête: sélectionnez coursename, code de cours, MIN (code de branche), MIN (levelcode) de tblCourse group par levelcode, coursecode, coursename, et il me donne encore trop de résultats, il semble que des lignes avec un code de branche ou un levelcode similaire Retourné, mais je ne veux pas avoir des éléments avec code de branche similaire ou levelcode, que dois-je faire maintenant?merci –

+0

Vous ne pouvez pas regrouper par levelcode et en appliquant une fonction d'agrégat dessus ?! S'il vous plaît poster votre requête réelle et ce n'est pas clair pour moi ce que vous avez vraiment besoin. Si vous groupez sur levelcode, coursecode et coursename, il est possible que des groupes distincts aient le même code de branche. –