Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询筛选出总和时出现问题_Sql - Fatal编程技术网

SQL查询筛选出总和时出现问题

SQL查询筛选出总和时出现问题,sql,Sql,我需要帮助了解如何从Oracle数据库优化以下SQL查询: SELECT DISTINCT PR.DOC_ID, PR.AMEND_NO, LEDGER.ACCT_ID, APPRVL_CHAIN.APPRVR, SUM(LEDGER.COMMIT) FROM LUFSMGR.APPRVL_CHAIN APPRVL_CHAIN, LUFSMGR.LEDGER LEDGER, LUFSMGR.PR PR WHERE PR.DOC_ID =

我需要帮助了解如何从Oracle数据库优化以下SQL查询:

SELECT DISTINCT 
    PR.DOC_ID, PR.AMEND_NO, LEDGER.ACCT_ID, APPRVL_CHAIN.APPRVR, 
    SUM(LEDGER.COMMIT)
FROM 
    LUFSMGR.APPRVL_CHAIN APPRVL_CHAIN, 
    LUFSMGR.LEDGER LEDGER, 
    LUFSMGR.PR PR
WHERE 
    PR.DOC_ID = LEDGER.DOC_ID 
    AND LEDGER.DOC_ID = APPRVL_CHAIN.DOC_ID 
    AND APPRVL_CHAIN.AMEND_NO = LEDGER.AMEND_NO 
    AND LEDGER.AMEND_NO = PR.AMEND_NO 
    AND ((PR.DOC_ID Like '2116%') 
         AND (LEDGER.ACCT_ID Like '25601 105300SD%') 
         AND (APPRVL_CHAIN.APPRVR_ROLE='Funds Manager'))
GROUP BY 
    PR.DOC_ID, PR.AMEND_NO, LEDGER.ACCT_ID, APPRVL_CHAIN.APPRVR
HAVING 
    (SUM(LEDGER.COMMIT) <> 0)
ORDER BY 
    PR.DOC_ID
选择DISTINCT
请购单ID、请购单修订号、分类账账户ID、APPRVL\u CHAIN.APPRVR、,
金额(分类账提交)
从…起
LUFSMGR.APPLVL_链APPLVL_链,
LUFSMGR.分类账,
LUFSMGR.PR
哪里
PR.DOC\u ID=分类帐.DOC\u ID
和LEDGER.DOC\u ID=APPRVL\u CHAIN.DOC\u ID
和APPRVL_CHAIN.AMEND_NO=分类账.AMEND_NO
和分类账.AMEND\u NO=PR.AMEND\u NO
和((PR.DOC_ID像“2116%”)
和(LEDGER.ACCT_ID如“25601 105300SD%”)
和(APPRVL_CHAIN.APPRVR_ROLE='Funds Manager'))
分组
请购单ID、请购单修订号、分类账账户ID、APPRVL\u CHAIN.APPRVR
有
(金额(分类账提交)0)
订购人
PR.DOC\u ID
这将生成样本如下所示的数据:


我需要过滤掉所有承诺(包括修订)之和等于0的文档ID。例如,应过滤掉文档ID 21162465SD541,因为编号0、1和2的总和为0。

如果需要文档级别的信息,则仅将其包含在
分组依据中:

SELECT PR.DOC_ID, Sum(LEDGER.COMMIT)
FROM LUFSMGR.APPRVL_CHAIN APPRVL_CHAIN JOIN
     LUFSMGR.LEDGER LEDGER
     ON LEDGER.DOC_ID = APPRVL_CHAIN.DOC_ID AND APPRVL_CHAIN.AMEND_NO = LEDGER.AMEND_NO JOIN
     LUFSMGR.PR PR
     ON PR.DOC_ID = LEDGER.DOC_ID AND  AND LEDGER.AMEND_NO = PR.AMEND_NO 
WHERE (PR.DOC_ID Like '2116%') AND
      (LEDGER.ACCT_ID Like '25601 105300SD%') AND 
      (APPRVL_CHAIN.APPRVR_ROLE = 'Funds Manager')
GROUP BY PR.DOC_ID
HAVING Sum(LEDGER.COMMIT) <> 0
ORDER BY PR.DOC_ID;
选择PR.DOC\u ID,Sum(分类账.提交)
从LUFSMGR.APPLVL_链APPLVL_链连接
LUFSMGR.分类账
在LEDGER.DOC\u ID=APPRVL\u CHAIN.DOC\u ID和APPRVL\u CHAIN.AMEND\u NO=LEDGER.AMEND\u NO连接上
LUFSMGR.PR
在PR.DOC\u ID=LEDGER.DOC\u ID和LEDGER.AMEND\u NO=PR.AMEND\u NO上
其中(PR.DOC_ID像“2116%”)和
(LEDGER.ACCT_ID如“25601 105300SD%”)和
(APPRVL_CHAIN.APPRVR_角色=‘基金经理’)
按PR.DOC\u ID分组
具有总和(分类帐.提交)0
按PR.DOC\u ID订购;
注:

  • 学习使用正确的
    JOIN
    语法。简单规则:切勿在
    FROM
    子句中使用逗号
  • 使用
    selectdistinct
    groupby
    几乎从来都不是正确的做法

如果您需要文档级别的信息,则只需将其包含在
分组中:

SELECT PR.DOC_ID, Sum(LEDGER.COMMIT)
FROM LUFSMGR.APPRVL_CHAIN APPRVL_CHAIN JOIN
     LUFSMGR.LEDGER LEDGER
     ON LEDGER.DOC_ID = APPRVL_CHAIN.DOC_ID AND APPRVL_CHAIN.AMEND_NO = LEDGER.AMEND_NO JOIN
     LUFSMGR.PR PR
     ON PR.DOC_ID = LEDGER.DOC_ID AND  AND LEDGER.AMEND_NO = PR.AMEND_NO 
WHERE (PR.DOC_ID Like '2116%') AND
      (LEDGER.ACCT_ID Like '25601 105300SD%') AND 
      (APPRVL_CHAIN.APPRVR_ROLE = 'Funds Manager')
GROUP BY PR.DOC_ID
HAVING Sum(LEDGER.COMMIT) <> 0
ORDER BY PR.DOC_ID;
选择PR.DOC\u ID,Sum(分类账.提交)
从LUFSMGR.APPLVL_链APPLVL_链连接
LUFSMGR.分类账
在LEDGER.DOC\u ID=APPRVL\u CHAIN.DOC\u ID和APPRVL\u CHAIN.AMEND\u NO=LEDGER.AMEND\u NO连接上
LUFSMGR.PR
在PR.DOC\u ID=LEDGER.DOC\u ID和LEDGER.AMEND\u NO=PR.AMEND\u NO上
其中(PR.DOC_ID像“2116%”)和
(LEDGER.ACCT_ID如“25601 105300SD%”)和
(APPRVL_CHAIN.APPRVR_角色=‘基金经理’)
按PR.DOC\u ID分组
具有总和(分类帐.提交)0
按PR.DOC\u ID订购;
注:

  • 学习使用正确的
    JOIN
    语法。简单规则:切勿在
    FROM
    子句中使用逗号
  • 使用
    selectdistinct
    groupby
    几乎从来都不是正确的做法

出了什么问题?到底是什么问题在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的使用不受欢迎。出了什么问题?到底是什么问题在ANSI-92 SQL标准(20多年前)中,旧式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的使用受到了阻碍。挑战是我仍然需要Ammend\u No,总承诺额不为0的文档的帐户ID和appvr。您可以使用
JOIN
中的
进行此查询以获取更多详细信息。挑战在于我仍然需要Ammend\u编号,总承付额不为0的文档的帐户ID和appvr。您可以将
加入
中的
与此查询一起使用,以获取其他详细信息。