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