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: p> 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. P>
3 Réponses :
Effectuer un Cela ne retournera jamais de lignes et donc Votre Somme () code> sur zéro rangs retournera null. Dans ce cas, votre sous-requête pour la colonne
Twelvemo code> a un
où code> clause de:
somme code> retournera null. p> p>
Vous n'avez pas qualifié tous vos prédicats dans votre clause où la clause de la sous-requête. P>
Spécifiquement, vous demandez des lignes où Mes suppositions basées sur les informations que vous avez fournies seraient que vous souhaitez que cela soit soit 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. P> fiscalid
fiscalid
a.fiscalid
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
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