J'ai une liste de lignes que j'ai besoin de grouper par une clé et pour chaque groupe, la valeur de deux colonnes dépend d'une condition d'une colonne différente. P>
Cela signifie que pour la valeur du Col 5 prenne celle où Col 4 est le plus bas et que le Col 7 prend la valeur où le col 6 est le plus élevé. P>
une idée de la manière de réaliser ce résultat? P>
4 Réponses :
Ceci suppose que votre groupe est déterminé par votre colonne clé
;with r as (
select Key, Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8,
row_number() over(partition by key order by Col4) as c4,
row_number() over(partition by key order by Col6 desc) as C6
)
select distinct r1.Key, r1.Col1, r1.Col2, r1.Col3,
r2.col4, r2.col5,
r3.col6, r3.col7,
r1.col8
from r r1
join r r2 on r2.key=r1.key and r2.c4=1
join r r3 on r3.key=r1.key and r3.c6=1
Vous avez besoin d'un distinct code> de sorte qu'il retournera 1 rangée au lieu de 2, et vous avez besoin d'un à partir du tableau code> dans le premier Sélectionnez la déclaration CODE>. Très intelligent BTW.
Votre jeu de données est difficile à utiliser car vous n'avez pas de clé unique sur chaque enregistrement. Avoir une clé unique simplifierait beaucoup la requête. Cela fait ce que vous demandez: qui renvoie ces données: p>
Vous pouvez utiliser first_value code> last_value code>
Vous pouvez le faire avec des fonctions de fenêtre telles que Voir le Demo . min () code> et first_value () code>:
Résultats: P> > Key | Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 | Col8
> :-- | :--- | :--- | ---: | :------- | :-------- | :------- | :-------- | :-------
> A | XXX | AAA | 5 | 20190601 | PI0104163 | 20200303 | PI0113027 | 20190531
Je ne suis pas sûr de disposer de suffisamment d'informations pour répondre ici. Comment savons-nous quelle valeur à prendre?
Comme expliqué. La valeur du col 5 devrait être la valeur sur le col 5 où le col 4 est le plus bas et pour le col 7 de la valeur du col 7 où le col 6 est le plus élevé. L'image montre que je prends le PI01041635) car la valeur la plus faible du col 4 est 20190601 (le plus bas du Col 4) et pour le Col 7 I Pick PI0113027 car le Col 6 est 20200303 (le plus élevé sur le Col 6)