0
votes

Sous-requête avec somme retourne null

Utilisation de SQL Server, j'ai une requête qui contient une sous-requête destinée à fournir un potey pour 12 périodes fiscales.

Il ne renvoie que NULL et j'ai été incapable de déterminer pourquoi. La requête est ci-dessous: xxx

Les résultats sont indiqués ci-dessous. Je m'attends à ce que je recevrais un relevé sur la période d'exécution de 12 fiscales au lieu de NULLS.

 résultats de requête


4 commentaires

fiscalid est toujours faux. Avez-vous besoin de quelque chose comme fiscalid ou a.fiscalid ?


Cela semble que vous pourriez être mieux avec pré-agrégation, puis utiliser une fonction vitrée pour obtenir la valeur des 12 derniers mois.


Quelle version de SQL Server utilisez-vous?


Quand il n'y a pas de lignes de rangement correspondant, Renvoie NULL et que votre requête ne renvoie jamais aucune ligne (fiscaliid


3 Réponses :


0
votes

Effectuer un Somme () sur zéro rangs retournera null. Dans ce cas, votre sous-requête pour la colonne Twelvemo a un clause de: xxx

Cela ne retournera jamais de lignes et donc Votre somme retournera null.


0 commentaires

0
votes

Vous n'avez pas qualifié tous vos prédicats dans votre clause où la clause de la sous-requête.

Spécifiquement, vous demandez des lignes où fiscalid

Mes suppositions basées sur les informations que vous avez fournies seraient que vous souhaitez que cela soit soit fiscalid ou a.fiscalid

C'est une bonne idée si vous utilisez la même table dans plusieurs endroits (ou à l'aide d'un alias pour une table de toute façon) pour utiliser des alias pour toutes les tables de votre requête, il est donc facile d'identifier les colonnes que vous appelez de quoi Tables.


0 commentaires

2
votes

Votre sous-requête n'est pas correctement corrélée à la requête extérieure. Surtout, cela ne correspondra jamais:

select 
    a.companyId,
    a.profitCenterId,
    a.coaId,
    a.fiscalId,
    sum(a.amount * -1) amount,
    twelveMo = (
        select coalesce(sum(amount * -1), 0)
        from gl a1
        where 
            a1.companyid = a.companyid
            and a1.coaid = a.coaid
            and a1.fiscalid >= a.fiscalid - 12 and a1.fiscalid < a.fiscalid
        )
from
    gl a 
    inner join fiscal f on a.fiscalid = f.id
    inner join coa c on a.coaid = c.id on c.statementtype = 4
    group by a.companyid, a.profitcenterid, a.coaid, a.fiscalid
    order by a.companyid, a.profitcenterid, a.coaid, a.fiscalid


0 commentaires