2012-10-26 3 views
-4

Comment sélectionner une valeur distincte dans une requête quand il y a plus d'une colonne quand je fais comme ça, je reçois une erreurSélection d'une valeur Distinct

select distinct tempname,rundate from History_Table ORDER BY RunDate DESC 

EDIT ::

j'ai montrer comme ça dans mon gridview

Name Rundate 
Test DDL(to show all the rundates) 
Test1 rundate 
+3

Quelle erreur avez-vous eu ?? –

+0

Je ne reçois pas d'erreur mais j'obtiens des noms en double –

+2

DISTINCT fonctionne sur l'ensemble des colonnes. Donc, vous obtenez des doublons tempname ou rundate, mais jamais un doublon de la ligne entière. – Steve

Répondre

2

dISTINCTS donner des lignes distinctes

semble vous avez besoin tempnam e avec un rundate (Last, First, etc). Cela peut être réalisé en utilisant GROUP BY. L'exemple suivant donnera le résultat tempname avec le dernier rundate

SELECT tempname,MAX(rundate) AS rundate FROM History_Table GROUP BY tempname 

Vous pouvez également utiliser ORDER BY.

SELECT tempname,rundate 
FROM 
(SELECT tempname,MAX(rundate) AS rundate FROM History_Table GROUP BY tempname) AS SummaryTable 
ORDER BY rundate 
+0

mais j'ai besoin d'obtenir tous les rundates associés au nom –

+1

Alors quel est le problème avec votre requête? C'est déjà le donner. N'est-ce pas? – Prasanna

0

Il semble que vous ayez besoin de deux requêtes séparées. Un pour obtenir les tempnames distinctes et un autre pour obtenir les rundates. Votre requête actuelle renvoie correctement les combinaisons distinctes des deux.

+0

La réponse de Prasanna ressemble plus à ce que vous voulez. Il est difficile de savoir à coup sûr sans savoir ce que vous voulez sortir de la requête. –

+0

si j'utilise des requêtes alternatives je reçois erreur dans le code derrière –

2

Il semble que vous souhaitiez concaténer vos dates d'exécution en une seule chaîne. Cela peut être fait en utilisant les extensions xml sql-server:

SELECT t1.TempName, 
     STUFF((SELECT ', [' + CONVERT(VARCHAR, t2.RunDate, 103) + ']' 
       FROM History_Table t2 
       WHERE t1.TempName = t2.TempName 
       ORDER BY t2.RunDate 
       FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') [RunDates] 
FROM ( SELECT DISTINCT TempName 
      FROM History_Table 
     ) t1 

Example SQL Fiddle

Une explication complète de la façon dont l'utilisation de XML pour concaténer des chaînes est contenue dans une autre réponse here, avec un peu d'aide de KM's answer to another question

+0

C'est ce que je veux je vais vérifier une fois, puis-je supprimer le [] ?? –

+0

supprimer les parenthèses n'aura aucun effet sur la requête, ni ne changera le format de date de 103 («jj/MM/aaaa»), je viens de l'ajouter pour rendre le résultat plus clair. – GarethD

+0

mais la chose est que je dois remplir une étiquette et une liste déroulante en utilisant cette requête cela fonctionnera-t-il ?? –

Questions connexes