-1
votes

CTE - syntaxe incorrecte près '.' '

Voici mon code:

  With table_CTE(a.PolicyNumber, Amount, 
b.PolicyNumber, FundValue)
 as
(
Select a.PolicyNumber, Amount,
b.PolicyNumber, FundValue
    from ( Select PolicyNumber, Amount, 
    from table.a
       ) as a
    
    Full Outer Join
        (Select PolicyNumber, FundValue
        from table.b
       ) as b
        on
    a.PolicyNumber = b.PolicyNumber
)


1 commentaires

Aussi, après le avec .... Comme (....) Il doit y avoir une instruction SQL qui utilise / références que cte ....


3 Réponses :


1
votes

Les noms de colonne ne supportent pas les périodes. Peut-être avez-vous l'intention de: xxx pré>

qui dit, vous n'avez pas à répéter les alias de colonne dans la définition CTE. Ils sont tous attribués dans le SELECT CODE>, vous pouvez utiliser Utiliser: P>

with table_CTE as (
    select . . .


0 commentaires

0
votes

Essayez ci-dessous

    With table_CTE as (Select INDCONEX.PolicyNumber, INDCONEX.InvestmentCode, 
     IndexType, Amount, INDCONEX.FundID, 
     INTCRDEX.PolicyNumber, FundValue, DepositDate, INTCRDEX.FundID, [Difference])

      (
      Select INDCONEX.PolicyNumber, INDCONEX.InvestmentCode,IndexType, Amount, 
      INDCONEX.FundID, 
       INTCRDEX.PolicyNumber, FundValue, DepositDate, INTCRDEX.FundID,
        abs (INDCONEX.Amount-INTCRDEX.FundValue) as [Difference]
    from ( Select PolicyNumber, InvestmentCode, IndexType,Amount, FundID 
   from FinancialExtracts.dbo.INDCONEX
        where RunDate = '20200531' and InvestmentCode >3) as INDCONEX

Full Outer Join
    (Select PolicyNumber, FundValue, DepositDate, FundID
    from FinancialExtracts.dbo.INTCRDEX
        where RunDate = '20200531' and InvestmentCode > 3) as INTCRDEX 
    on
INDCONEX.PolicyNumber = INTCRDEX.PolicyNumber and
INDCONEX.FundID = INTCRDEX.FundID


4 commentaires

Je viens d'apprendre SQL alors merci de votre réponse. Lorsque j'exécute ce code, je reçois des erreurs disant "l'identifiant multi-pièces" IndConex.PolicyNumé "n'a pas pu être lié" pour la plupart des objets. Savez-vous ce que signifie cette erreur?


Oui ! Vous avez écrit le numéro de stratégie écrit deux fois, écrivez-le une fois et n'utilisez pas de colonnes alias dans la définition CTE.


La requête ci-dessus tire des colonnes de deux tables différentes (INDCONEX et INTCRDEX) et la combinant en fonction de la norme PolicyNumber (car les deux tableaux ont les mêmes numéros de politique). Lorsque je n'écris que des règles de stratégie une fois que je reçois une erreur disant "TABLE_CTE a plus de colonnes que spécifiées dans la liste de colonnes" Comment puis-je faire la liste des colonnes répertoriées dans les deux tableaux (numéro de stratégieNumber, fonduidé)?


Dans une déclaration de sélection, vous écrivez une fois? Sélectionnez IndConex.PolicyNumber, IndConex.InvestmentCode, IndexType, Montant, IndConex.Fundid, Intcrdex.PolicyNumber, Fundvalue, Intcrdex.Fundid, ABS (IndConex.Amount-Intcrdex.Fundvalue) Comme [différence]



0
votes

Vous ne devez pas qualifier les noms de colonne dans l'en-tête CTE avec des alias des noms de table utilisés à l'intérieur du CTE.
Aussi table.a et table.b ne sont pas des noms de table valides (car ils contiennent le . ). ). Si ce sont les noms réels, vous devez les enfermer entre crochets: [table.a] et [table.b] .
Mais je crois que vous voulez juste utiliser des alias pour eux et ce n'est pas la bonne façon de le faire.
Vous compliquez trop la CTE.
C'est aussi simple que ceci: xxx

remplacer tabla et tableb avec les noms de table réels.
Les colonnes a.policynumber et b.policyNumber colonne de retour avec le même nom et ceci n'est pas autorisé, c'est pourquoi je les ai alias sur StratégieNumbera et stratégieNumberb .


0 commentaires