简体   繁体   English

Sums上的SQL查询条件

[英]SQL Query Conditions on Sums

I am new to SQL and I have a question regarding the display of data and how to get the query to display the way I want. 我是SQL新手,我对数据的显示以及如何使查询以所需的方式显示有疑问。 Our BI people are busy on other projects so we (finance) are left to pick up the slack. 我们的BI人员正忙于其他项目,因此我们(财务)可以自行安排工作。 I am going to dump this in a ODBC to EXCEL, if that is relevant. 如果相关的话,我将在ODBC中将其转储到EXCEL。

My Query is selecting the correct information but I want two columns for the SUM (INVOICE.INVAMT) , I want a column that is the sum of INVOICE.INVAMT (or NULL) when INVOICE.INVDATE is less than FUNDEPTPER.STARTDATE and a column for the sum of INVOICE.INVAMT when INVOICE.INVDATE is between and including FUNDEPTPER.STARTDATE and FUNDDEPTPER.STOPDATE , (OR NULL). 我的查询正在选择正确的信息,但我希望有两列用于SUM (INVOICE.INVAMT) ,当INVOICE.INVDATE小于FUNDEPTPER.STARTDATE时,我想要的列是INVOICE.INVAMT (或NULL)的总和为的总和INVOICE.INVAMTINVOICE.INVDATE是之间并且包括FUNDEPTPER.STARTDATEFUNDDEPTPER.STOPDATE ,(OR NULL)。 A grand total would be nice too. 总计也很不错。

I can do one at a time, but not both - my gut says this can be done - but I cannot figure out how. 我一次只能做一个,但不能两者都做-我的直觉说这可以做到-但我不知道怎么做。

Your help is greatly appreciated. 非常感谢您的帮助。 I do not need to know specifically (ie. the exact query language), if you could even explain high level I might be able to get it (if it is possible???) 我不需要专门了解(即确切的查询语言),如果您甚至可以解释高级知识,我也许可以得到(如果可能的话?)

My Query if you need it: 我的查询,如果您需要它:

SELECT FUNDERS.CODE, BILLBATCH.BATCH_ID, BILLBATCH.BATCHNO,  SUM (INVOICE.INVAMT) AS [TOTAL CURRENT] 
FROM FUNDERS INNER JOIN ORDERS ON FUNDERS.FUNDER_ID= ORDERS.FUNDER_ID    
INNER JOIN INVOICE ON ORDERS.ORDER_ID=INVOICE.ORDER_ID    
INNER JOIN FUNDEPTPER ON FUNDEPTPER.PERIOD_ID = INVOICE.PERIOD_ID    
INNER JOIN BILLBATCH ON BILLBATCH.BATCH_ID= FUNDEPTPER.BATCH_ID    
WHERE BILLBATCH.BATCHNO = '?' AND INVOICE.INVTYPE='Invoice' 
      AND INVOICE.INVDATE BETWEEN FUNDEPTPER.STARTDATE AND FUNDEPTPER.STOPDATE    
GROUP BY FUNDERS.CODE, BILLBATCH.BATCH_ID, BILLBATCH.BATCHNO

You can do this with conditional aggregation 您可以通过条件聚合来做到这一点

SELECT f.CODE, bb.BATCH_ID, bb.BATCHNO,
      SUM(i.INVAMT) AS TotalTotal,
      SUM(case when i.INVDATE BETWEEN fp.STARTDATE AND fp.STOPDATE then i.invamt else 0
          end) as TotalCurrent
      SUM(case when i.INVDATE < fp.STARTDATE Athen i.invamt else 0
          end) as TotalBefore
FROM FUNDERS f INNER JOIN
     ORDERS o
     ON f.FUNDER_ID = o.FUNDER_ID  INNER JOIN
     INVOICE i
     ON o.ORDER_ID = i.ORDER_ID INNER JOIN
     FUNDEPTPER fp
     ON fp.PERIOD_ID = i.PERIOD_ID INNER JOIN
     BILLBATCH bb
     ON bb.BATCH_ID= fp.BATCH_ID    
WHERE bb.BATCHNO = '?' AND i.INVTYPE = 'Invoice' 
GROUP BY f.CODE, bb.BATCH_ID, bb.BATCHNO;

This query also introduces table aliases. 该查询还引入了表别名。 These make the query easier to write and to read. 这些使查询更易于编写和阅读。

I need to break down your needs to understand your inquiry. 我需要分解您的需求以了解您的询问。

You're requirement - two columns for the SUM (INVOICE.INVAMT): 您需要-SUM的两列(INVOICE.INVAMT):

  1. sum of INVOICE.INVAMT (or NULL) when INVOICE.INVDATE is less than FUNDEPTPER.STARTDATE 当INVOICE.INVDATE小于FUNDEPTPER.STARTDATE时,INVOICE.INVAMT的总和(或NULL)。

    SELECT sum(invoice.invamt) FROM funders INNER JOIN ORDERS ON FUNDERS.FUNDER_ID= ORDERS.FUNDER_ID INNER JOIN INVOICE ON ORDERS.ORDER_ID=INVOICE.ORDER_ID INNER JOIN FUNDEPTPER ON FUNDEPTPER.PERIOD_ID = INVOICE.PERIOD_ID WHERE INVOICE.INVDATE < FUNDEPTPER.STARTDATE;

  2. sum of INVOICE.INVAMT when INVOICE.INVDATE is between and including FUNDEPTPER.STARTDATE and FUNDDEPTPER.STOPDATE 当INVOICE.INVDATE在FUNDEPTPER.STARTDATE和FUNDDEPTPER.STOPDATE之间且包括INVALICE.INVDATE时,INVOICE.INVAMT的总和

    SELECT sum(invoice.invamt) FROM funders INNER JOIN ORDERS ON FUNDERS.FUNDER_ID= ORDERS.FUNDER_ID INNER JOIN INVOICE ON ORDERS.ORDER_ID=INVOICE.ORDER_ID INNER JOIN FUNDEPTPER ON FUNDEPTPER.PERIOD_ID = INVOICE.PERIOD_ID WHERE INVOICE.INVDATE between FUNDERTPER.STARTDATE and FUNDDERTPER.STOPDATE

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM