2017-10-20 15 views
0

Comment puis-je faire cela dans mon SQL Server sélectionnez?Afficher le numéro 1 juste pour la première ligne SQL Server

Exemple:

ID Name Event 
------------------------------ 
1 Mary Running 20/10/2017 
1 Mary Running 20/10/2017 
1 Mary Stopped 20/10/2017 
1 Mary Running 20/10/2017 
2 John Stopped 20/10/2017 
2 John Running 20/10/2017 
3 Lucy Stopped 20/10/2017 
3 Lucy Running 20/10/2017 
3 Lucy Stopped 20/10/2017 

Je voudrais montrer un résultat 1 pour chaque ID, mais seulement dans une rangée

ID Name Event    Row 
----------------------------------- 
1 Mary Running 20/10/2017 1 
1 Mary Running 20/10/2017 0 
1 Mary Stopped 20/10/2017 0 
1 Mary Running 20/10/2017 0 
2 John Stopped 20/10/2017 1 
2 John Running 20/10/2017 0 
3 Lucy Stopped 20/10/2017 1 
3 Lucy Running 20/10/2017 0 
3 Lucy Stopped 20/10/2017 0 
+0

quelle est la logique, quelle rangée obtenir le 1? –

+0

Ajoutez votre requête en cours s'il vous plaît. –

+0

J'utilise une vue dans les services d'analyse, et je dois compter un identifiant distinct et la même date –

Répondre

4

Nous ne pouvons pas donner une réponse spécifique sans votre requête, alors voici un général. Utilisez ROW_NUMBER() pour donner à chaque ligne un numéro, puis utilisez une instruction CASE pour remplacer tous, mais la ligne 1 et 0:

SELECT ID, Name, Event, 
     CASE WHEN RN = 1 THEN 1 ELSE 0 END [Row] 
FROM (SELECT ID, Name, Event, 
      ROW_NUMBER() over (PARTITION BY ID ORDER BY ID) RN --Add Event to the 
                   --partition if needed 
     FROM YourTable 
    ) A 

Comme @JNevill mentionné, vous pouvez nettoyer ce jusqu'à éviter la sous-requête en ajoutant la fonction de fenêtre directement votre déclaration CASE:

SELECT ID, Name, Event, 
     CASE WHEN ROW_NUMBER() over (PARTITION BY ID ORDER BY ID) = 1 
      THEN 1 
      ELSE 0 
     END [Row] 
FROM YourTable 
+0

Ce code remplacerait tous les nombres 1 à 0 –

+2

@EvertonGomes Non parce que 1 devient 1. –

+2

Pourriez-vous coller la fonction ROW_NUMBER() dans l'instruction CASE elle-même pour éviter la sous-requête? Je ne sais pas si c'est légal dans tsql ou pas, mais cela semble légal. – JNevill

0

Pour obtenir distinct à la fois ID et la date vous pouvez utiliser le code suivant:

SELECT ID,RIGHT([Event],10) FROM Some_table GROUP BY ID,RIGHT([Event],10) 

OU

SELECT distinct ID,RIGHT([Event],10) FROM Event_table 

Si vous ajoutez une ligne, par exemple:

(1, 'Mary', 'Running 21/10/2017)

Vous obtiendrez deux lignes pour ID 1 et l'un donnerait 20/10/2017 et l'autre donnerait 21/10/2017.

Y at-il un besoin particulier pour la colonne avec 1 et 0?