Je veux récupérer une valeur d'une table dans deux colonnes différentes pour des valeurs différentes de la même table. Utilisez cette requête comme exemple (remarquez comment la sélection se trouve sur la même table aliasée que 2 tables différentes):
SELECT a.myVal, b.myVal
FROM MyTable a, MyTable b
WHERE
a.otherVal = 100 AND
b.otherVal = 200 AND
a.id = b.id
Lorsque j'exécute une requête relativement simple comme celle-ci sur mon ensemble de données, cela fonctionne - cela prend juste beaucoup de temps. Existe-t-il un moyen meilleur/plus intelligent d'écrire cette requête?
Pour plus de lisibilité, je réécrirais la requête en utilisant la syntaxe de jointure la plus moderne. Cela séparera clairement vos conditions de jointure de vos filtres.
select a.myVal,
b.myVal
from MyTable a
join MyTable b on b.id = a.id
where a.OtherVal = 100
and b.Otherval = 200
Pour les performances, assurez-vous que vous disposez des index appropriés. Dans cet exemple limité, l'idéal serait d'avoir un index cluster sur ID et un index non cluster sur OtherVal.
Après avoir examiné votre requête, cependant, je ne peux pas dire exactement ce que vous essayez d'accomplir.
Vous pouvez utiliser le regroupement et l'agrégation conditionnelle, comme ceci:
SELECT
id,
MAX(CASE OtherVal WHEN 100 THEN MyVal END) AS MyVal1,
MAX(CASE OtherVal WHEN 200 THEN MyVal END) AS MyVal2
FROM MyTable
WHERE OtherVal IN (100, 200)
GROUP BY
id
;