mysql - 从同一表中选择的 SQL 子查询

标签 mysql sql

我正在运行一个查询以提取我们系统中生成的数据并将其与一个单独的发票表进行比较,该表正在运行。但是,现在我只需要为大于在我们系统中输入的日期的发票提取那个 sum(volumnece)。

这是我的查询:

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 都在输入日期之后

Commitments

Sales2

最佳答案

我认为你的 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 then sum() 结束。合理? Case 子句适用于每个 volume 而不是总计。

可能也不是 null 最优雅的用法

sum( CASE when s.invoice_date>=c.created_at then coalesce(s.volumece,0)
          else 0
          end)

更简单?

关于mysql - 从同一表中选择的 SQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856488/

相关文章:

java - 使用 "StringUtils.join(array, "' ,'") 进行选择;"

php - 发送 : How to insert NULL values into MySQL

MySql::选择进入

sql - 未找到匹配项时左连接结果为空

php - 在 MySQL 中查询这个的最有效方法

sql - 如果未找到引用表中的值,则在表中插入行

mysql - 条件复杂的 SQL 连接

mysql - "Table doesn' t存在”问题

mysql - 无法添加或更新子行: a foreign key constraint fails

sql - 当事件范围超过一个月时按月汇总事件成本(在 rails 3 中)