Avec l'aide de @avery_Larry, j'ai fait ma requête, mais je suis maintenant confronté à un petit problème.
Je suis capable d'ajouter une quantité d'autres tables supplémentaires. Maintenant, je dois ajouter du montant de la même table avec deux parties différentes Pas de colonnes.
Le 1er col est partie 1 et 2e col est partie2. La colonne de quantité est identique.
Quand j'ajoute une sous-requête, je reçois une erreur que
"Le nom de corrélation convert code> est spécifié plusieurs fois dans une clause de la clause."
convert code> est le nom de la table.
Voici mon code. SELECT dbo.[PART LIST].PART,
[COST ALL].[cost total],
[SELL ALL].[sell total],
[CONVERT].[FROM total],
[convert].[TO total]
FROM
dbo.[PART LIST]
LEFT OUTER JOIN (SELECT PART, SUM(AMT) AS [cost total]
FROM dbo.[COST ALL] AS [COST ALL_1]
WHERE (STREAM = N'Y') AND (USAGE = N'MUM')
GROUP BY PART ) AS [COST ALL] ON [COST ALL].PART = dbo.[PART LIST].PART
LEFT OUTER JOIN (SELECT PART, SUM(AMT) AS [sell total]
FROM dbo.[SELL ALL] AS [SELL ALL_1]
WHERE (STREAM = N'FSA') AND (USAGE = N'MUM')
GROUP BY PART ) AS [SELL ALL] ON [SELL ALL].PART = dbo.[PART LIST].PART
LEFT OUTER JOIN (SELECT [From PART], SUM(Amt) AS [FROM total]
FROM dbo.[convert] AS CONVERT_1
GROUP BY [From PART] ) AS [CONVERT] ON [CONVERT].[From PART] = dbo.[PART LIST].PART
LEFT OUTER JOIN (SELECT [TO PART], SUM(Amt) AS [TO total]
FROM dbo.[convert] AS CONVERT_1
GROUP BY [TO PART] ) AS [CONVERT] ON [CONVERT].[TO PART] = dbo.[PART LIST].PART
3 Réponses :
Vos 2 derniers sous-ties sont tous deux des alias comme [convertir] Changer l'un d'entre eux p>
Changé [Convertir] en [kconvert] mais obtenait toujours la même erreur. [kconvert] est un nom de table. Ne peut pas changer le nom de la table juste en requête.
Je vous ai dit que vous avez réservé des mots-clés ne pouvant être utilisés comme noms de table ou n'importe où, etc. Vous devez renommer votre table comme des mots-clés réservés sont des objets SQL par défaut qui ont une certaine signification et but comme convertir une fonction d'objet de base de données par défaut pour convertir certaines valeurs, etc.
Ma suggestion serait toujours convertie est le mot clé réservé. Changez-le à un autre nom convert1, etc. Le déjà aliasé dans votre requête, je suppose que vous devriez vous avoir donné une erreur avant d'aliaser aussi. p>
Changé [Convertir] en [kconvert] mais obtenait toujours la même erreur. [kconvert] est un nom de table. Ne peut pas changer le nom de la table juste en requête.
Utilisation d'un mot-clé comme nom de table est une mauvaise conception. Mais cela ne peut pas causer l'erreur dans la question initiale. Cette réponse n'est utile que comme un commentaire concernant la conception de la base de données.
@Avery_Larry Essayez cette requête Sélectionnez * à partir de la table sous t code> Où tableau est un mot clé réservé et laissez-moi savoir si vous obtenez une erreur de mot-clé réservé ou non. Chaque base de données SQL a ses mots-clés du système par défaut qui doivent être utilisés autre que dans le contexte qu'ils devraient
Je suis bien au courant des choses qui ne peuvent pas être faites. Votre réponse ne répond toujours pas à la question réelle posée et votre exemple ne peut toujours pas causer l'erreur dans la question initiale. Basé sur le code présenté par OP, on devrait présumer [convert] a été créé avec succès comme une table dans leur base de données ou B> onction devrait présumer que l'OP a changé les noms des tables à utiliser simplement comme des exemples de leur conception actuelle de la base de données.
Sélectionnez * à partir de [Tableau] comme t code> fonctionne simplement bien. C'est terriblement mauvais, mais cela fonctionne sans erreur.
Avez-vous compris des crochets? Ahh .. la raison pour laquelle cela a fonctionné pour vous. Je me demande que vous avez eu l'idée maintenant. Je ne pense pas que les supports dans chaque base de données, car SQL standard fonctionne pour échapper aux noms de mots-clés réservés.
@kryesec est correct. Chaque sous-requête doit avoir un alias unique.
Vous ne pouvez pas faire cela: p> ceci a Ce qui suit est ce que je pense que vous voulez que votre code à être. Remarque J'ai supprimé les alias de l'intérieur des sous-sollicitations - ils sont inutiles, bien que de même, ils ne causent aucun problème. Le changement principal qui devrait résoudre votre erreur modifie les 2 sous-soluies finales des deux à l'aide de l'alias comme une note latérale - vous serez probablement plus heureux si vous n'utilisez pas d'espaces dans aucun de vos noms de colonne ou alias ou tables, etc. Cela vous permet d'éviter les citations / crochets. Dans votre code, comme exemple, je suggérerais [convert] code> défini deux fois. Parce qu'il n'ya aucun moyen de savoir quel em> [convert] .col1 code> nous voudrions réellement, ceci est invalide et produit l'erreur que vous voyez.
Vous pouvez utiliser [convert] code> plusieurs fois en tant que tableau de sélection de à partir de code>. Pour ce faire, chaque référence doit être unique dans la portée em>. Ce qui signifie que vous n'avez pas besoin d'alias [convert] code> à l'intérieur de chaque sous-requête car il est unique à l'intérieur de chaque sous-requête (périmètre unique). mais strong> chaque sous-requête em> doit ensuite avoir un alias unique, et c'est là que vient votre message d'erreur. P> [convert] code> pour utiliser les alias [de_convert] code> et [TO_CONVERT] < / Code> respectivement. p> comme coût_all sur cost_all.parart = code> et SELECT ... SUM (AMT) comme de_total code>.
De plus, il est (très) la conception incorrecte d'utiliser des mots-clés pour les noms de tables, de colonnes, de bases de données, etc. On dirait que vous avez une table nommée [convertie]. Peut-être que vous ne pouvez rien changer avec votre conception à ce stade, mais vous devriez vous en appeler, et vous devez vous en souvenir des projets futurs. P> P>
Je ne sais pas pourquoi quelqu'un a révélé cette réponse comme c'est correct.
@Kryesec a répondu en premier - peut-être que quelqu'un a pensé que je "voler" leur réponse. L'OP semblait peut-être confus sur les différences entre une table, un alias de table et un alias de sous-requête à l'exposition. En outre, ma réponse originale a peut-être mérité un bowvote pour ne pas signaler la mauvaise conception d'utiliser Convertir comme nom de table. J'ai édité ma réponse pour inclure cette information.
@avery_larry merci d'explication détaillée et de solution. Je ne suis sûr que je ne suis pas capable d'obtenir plusieurs champs d'une table, mais vous avez montré une solution de contournement. Ça marche comme charme. J'ai envisagé vos suggetions et je mettrai la mise en œuvre dans la mesure du possible. Merci encore.
Salut @scm, quelle base de données utilisez-vous? Merci!
En outre, que devrait-il être: [convertir]. [Du total]
Sa SQL j'utilise. J'ai changé de nom de table convertir en kconvert. [Kconvert]. [Du total] est au total du montant.
Bonjour @scm, SQL n'est pas une base de données. SQL est une langue que vous utilisez mais les Data Databas Eis SQLSERVER, OU MYSQL ou Oracle ... Il devrait être agréable de savoir que. Par exemple, cette question était la balise comme SQLServer.
Merci pour l'information. J'utilise SQL Server.