从同一表中选择SQL查询
问题描述:
我正在运行一个查询来撤回在我们的系统中制作的数据,并将其与单独的发票表进行比较,该表正在工作。但是,现在我只需要将该总额(卷)仅限于发票数量大于系统中输入的日期。从同一表中选择SQL查询
这里是我的查询:
SELECT
MIN(c.created_at) AS date,
c.meta_account_Id,
c.organization_Id,
c.user_id,
c.meta_distributorId,
c.meta_accountName,
CASE
WHEN sum(s.volumece) IS NULL THEN 0
ELSE sum(s.volumece)
END AS ces
FROM [commitments] c
LEFT JOIN [Sales2] s ON c.organization_Id=s.org_id AND
c.meta_account_Id=s.account_id
WHERE c.status='active'
GROUP BY c.meta_account_Id, c.organization_Id, c.user_id,
c.meta_distributorId, c.meta_accountName
这里是什么,我认为它应该看起来像,但显然不正确:
SELECT
MIN(c.created_at) AS date,
c.meta_account_Id,
c.organization_Id,
c.user_id,
c.meta_distributorId,
c.meta_accountName,
CASE
WHEN sum(s.volumece) IS NULL THEN 0
ELSE (SELECT sum(s.volumece) WHERE s.invoice_date>=c.created_at)
END AS ces
FROM [commitments] c
LEFT JOIN [Sales2] s ON c.organization_Id=s.org_id AND
c.meta_account_Id=s.account_id
WHERE c.status='active'
GROUP BY c.meta_account_Id, c.organization_Id, c.user_id,
c.meta_distributorId, c.meta_accountName
基本上[Sales2]是发票和[承诺的表]是在我们的系统中创建的新发票的表格。通过account_id匹配这些数据,然后将所有数据从创建和前进的日期中拉回,在系统中输入的发票之前没有发票。
例子:
这一次真的应该总结为0 CES因为所有invoice_dates是日期是enetered
答
后,我觉得你的case语句必须在sum()子句中不在它之外。
sum(CASE WHEN s.volumece IS NULL THEN 0
when s.invoice_date>=c.created_at then s.volumece
else 0
end)
尝试保持sum(case ...)而不是case when sum()end。合理? Case条款适用于每个卷,而不适用于总合计。
也许不是最优雅的情况下使用空或者有
sum(CASE when s.invoice_date>=c.created_at then coalesce(s.volumece,0)
else 0
end)
简单的?
+0
真棒是的作品像一个魅力。并且也非常感谢你的解释,这是非常有意义的。 – nickbrleet
为什么不把's.invoice_date> = c.created_at'作为另一个* join *条件? – Uueerdo
样本数据和期望的结果将真正帮助您的问题。 –
因为那么这个连接会缩小我的结果,我只想缩小这个“ces”的总和。基本上我想保持原样,说18行项目的结果,然后我想根据发票之后的发票总和缩小最后一个col“ces” – nickbrleet