[英]SQL Subquery within select from same table
我正在運行一個查詢來拉回我們系統中制作的數據,並將其與一個單獨的發票表進行比較,這是有效的。 但是,現在我只需要為大於我們系統中輸入的日期的發票提取該金額(數量)。
這是我的查詢:
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] 是一張發票表,而 [commitments] 是一張在我們系統中創建的新發票表。 通過 account_id 將這些匹配起來,然后從創建之日起全部撤回,在我們系統中輸入的發票之前沒有發票。
例子:
這個應該真的總結為 0 ces 因為所有的 invoice_dates 都在輸入日期之后
我認為你的 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() 結束時,嘗試保留 sum(case ...) 而不是 case。 有道理? 案例條款適用於每個體積而不是總總量。
可能也不是最優雅的 case null 用法
sum( CASE when s.invoice_date>=c.created_at then coalesce(s.volumece,0)
else 0
end)
更簡單?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.