J'essaie de faire une requête pour récupérer la région qui a eu le plus de ventes pour les produits sucrés. 'GRUPO_PRODUTO' est le type de produit et "Regiao" est la région. J'ai donc reçu cette requête: puis lorsque j'exécute la requête, MS-Access demande le paramètre "Total". Pourquoi cela ne considère pas la "colonne" nouvellement créée dans la clause Select? P> Merci d'avance! P> P>
8 Réponses :
Essayez d'utiliser une sous-requête et commandez les résultats dans une requête extérieure.
SELECT TOP 1 * FROM ( SELECT r.nm_regiao, (SELECT COUNT(*) FROM Dw_Empresa WHERE grupo_produto='1' AND cod_regiao = d.cod_regiao) as total FROM Dw_Empresa d INNER JOIN tb_regiao r ON r.cod_regiao = d.cod_regiao ) T1 ORDER BY total DESC
C'est étrange. Lorsque j'essaie que la colonne "totale" devienne tous 0 et au lieu d'une rangée montrant, je reçois 10 rangées similaires. J'essaie de comprendre pourquoi. C'est cependant comme ça. Merci
Les alias sont uniquement utilisables dans la sortie de la requête. Vous ne pouvez pas les utiliser dans d'autres parties de la requête. Malheureusement, vous devrez copier et coller toute la sous-requête pour le faire fonctionner. P>
Vous ne pouvez pas utiliser l'alias, mais vous pouvez répéter l'expression d'être aliasée. Jet ne le calculera qu'une seule fois, il n'est donc que inefficace en ce qui concerne la frappe.
Pas dans ce cas. Vous obtiendrez une erreur si vous essayez de commander par la sous-requête postée.
"Les alias ne sont utiles que dans la sortie de la requête" - je suis en désaccord: je pense qu'il est très utile de pouvoir utiliser des "alias" dans la clause code> par code>.
"Vous ne pouvez pas utiliser [" alias "] dans d'autres parties de la requête" - c'est parce que ces "autres parties" sont résolues avant la clause SELECT CODE>. Cependant, la clause
par code> est appliquée après la clause
SELECT CODE> de sorte que cela ne devrait pas être un problème ... c'est ne devrait pas i> être mais dans l'accès c'est :(
Les alias sont utiles i> b> sur toute la requête, y compris d'autres champs de la liste code> code>. J'aurais dû dire "utilisable". Je vais éditer pour clarifier.
Je n'ai pas suffisamment plongé dans le SQL pour le dire, mais je ne suis pas certain que cela nécessite une sous-requête. Il me semble que cela pourrait être faisable d'une jointure sur une table dérivée (c'est-à-dire dans la clause de l'article). Mais comme je le disais, je ne cherche pas aussi étroitement à la SQL.
Que diriez-vous:
SELECT TOP 1 r.nm_regiao FROM (SELECT Dw_Empresa.cod_regiao, Count(Dw_Empresa.cod_regiao) AS CountOfcod_regiao FROM Dw_Empresa WHERE Dw_Empresa.[grupo_produto]='1' GROUP BY Dw_Empresa.cod_regiao ORDER BY Count(Dw_Empresa.cod_regiao) DESC) d INNER JOIN tb_regiao AS r ON d.cod_regiao = r.cod_regiao
Pourquoi cela ne considère pas le nouveau créé 'colonne' j'ai fait dans la sélection Clause? P>
Parce que l'accès (Ace / Jet) n'est pas conforme à la norme SQL-92. P>
Considérez cet exemple, qui est valide SQL-92: P>
SELECT a AS x, c - b AS y FROM MyTable ORDER BY a, c - b;
Je suggère d'utiliser une requête intermédiaire.
SELECT TOP 1 nm_regiao, total FROM GroupTotalsByRegion WHERE grupo_produto = '1' ORDER BY total DESC
Vous n'êtes pas obligé de le sauvegarder - vous devriez pouvoir utiliser une table dérivée dans la clause de la clause de la requête enregistrée.
Vous pouvez le faire comme cet accès
select * from( select a + b as c, * from table) order by c
Une ancienne question que je connaisse, mais cela peut aider quelqu'un à savoir que pendant que vous ne pouvez pas commander par des alias, vous pouvez commander par index de colonne. Par exemple, cela fonctionnera sans erreur:
SELECT firstColumn, IIF(secondColumn = '', thirdColumn, secondColumn) As yourAlias FROM yourTable ORDER BY 2 ASC
Que diriez-vous d'utiliser: avec em> strong> xx comme em> strong> ( Sélectionnez le top 1 r.nm_regiao (sélectionnez Count (*) De dw_empresa Où grupo_produto = '1' et Cod_regiao = d.cod_regiao) comme total De dw_empresa d Rejoignez interne tb_regiao r sur r.cod_regiao = d.cod_regiao ) Sélectionnez STRUT> * de strong> xx em> commander strong> par strud> total em> p>