J'ai une table comme celle-ci. REMARQUE: Les données sont déjà en ordre triés P> Le résultat dont j'ai besoin: P> Name| Id | cost
----------------
A | 1 | 1000
----------------
| | 2000
----------------
B | 2 | 3000
----------------
| | 4000
3 Réponses :
Vous pouvez utiliser ceci suppose que vous voulez row_number () code>:
(nom, id) code> tuples commandé par
Coût code> (comme indiqué dans votre exemple de données). Si vous souhaitez utiliser une autre colonne de commande, vous pouvez modifier la clause code> par code> des fonctions de la fenêtre. P> p>
Comment savez-vous que coût code> fournit la commande que l'OP veut ici?
@TimbieGeleisen: Je commençais à ce sujet. Cela semble simplement être ce que OP veut (il correspond à leurs données d'échantillon) - bien sûr, une autre colonne peut être utilisée.
pouvons-nous faire
Je ne recommande pas de faire cela comme une requête de base de données. Le jeu de résultats contiendra des lignes qui n'ont pas de sens, à moins que vous ne voyiez les lignes au-dessus d'eux - et ce n'est pas la voie SQL.
Je suggérerais de la première agrégation et de mettre les coûts en une seule ligne: P>
select (case when seqnum = 1 then name end) as name, (case when seqnum = 1 then id end) as id, cost from (select t.*, row_number() over (partition by name, id order by cost) as seqnum from t ) t order by name, id, seqnum
Vont afficher le résultat quelque part?
cas lors de la clause sur le numéro de rangée sur la fenêtre sur le nom
déjà dans la commande triée code> ... est l'ordre de tri de la colonne
coût code>? Parce que, sinon, l'ordre que vous percevez n'est même pas vraiment là.
C'est un travail le mieux fait dans la couche de présentation plutôt que dans T-SQL.