簡體   English   中英

從同一個表中選擇的 SQL 子查詢

[英]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 都在輸入日期之后

承諾

銷售2

我認為你的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM