select-ORACLE SQL 无聚合函数 和 有聚合函数 左外连 报不是 GROUP BY 表达式的错误

问题描述

ORACLE SQL 无聚合函数 和 有聚合函数 左外连 报不是 GROUP BY 表达式的错误
SELECT
*
FROM
(
SELECT
t11.tokuisaki_cd AS tokuisakiCd-- A.得意先
'1' AS jizenShikyuuHandan -- '1'(事前) AS 事前支給判断
t11.jizen_shinsei_taishou_fg AS jizenShinseiTaishouFg -- A.事前申請対象フラグ
t11.jigo_shinsei_taishou_fg AS jigoShinseiTaishouFg -- A.事後申請対象フラグ
'事前' AS shinsei -- '事前' AS 申請
t11.kaigo_seikyuu_dv AS kaigoSeikyuuDv -- A.介護請求区分
t11.uriku_cd AS urikuCd -- A.売区コード
FROM
m_yakusho_shinsei t11 -- 役所申請 A
WHERE
t11.jizen_shinsei_taishou_fg = '1' -- WHERE A.事前申請対象フラグ = '1'(事前申請対象)
AND t11.uriku_cd = 'HB02' -- AND A.売上区分 = 'HB02'(特定福祉)
AND t11.delete_fg = '0' -- AND A.削除フラグ = '0'(通常)
AND t11.kaigo_seikyuu_dv IN ('SHO' 'INI' 'SHH') -- AND A.介護請求区分 IN ('SHO'(償還)'INI'(受領委任)'SHH'(生保(国保90/公費10))
UNION
SELECT
t11.tokuisaki_cd AS tokuisakiCd -- A.得意先
'0' AS jizenShikyuuHandan -- '0'(支給) AS 事前支給判断
t11.jizen_shinsei_taishou_fg AS jizenShinseiTaishouFg -- A.事前申請対象フラグ
t11.jigo_shinsei_taishou_fg AS jigoShinseiTaishouFg -- A.事後申請対象フラグ
'支給' AS shinsei -- '支給' AS 申請
t11.kaigo_seikyuu_dv AS kaigoSeikyuuDv -- A.介護請求区分
t11.uriku_cd AS urikuCd-- A.売区コード
FROM
m_yakusho_shinsei t11 -- 役所申請 A
WHERE
t11.jigo_shinsei_taishou_fg = '1' -- WHERE A.事後申請対象フラグ = '1'(事後申請対象)
AND t11.uriku_cd = 'HB02' -- AND A.売上区分 = 'HB02'(特定福祉)
AND t11.delete_fg = '0' -- AND A.削除フラグ = '0'(通常)
AND t11.kaigo_seikyuu_dv IN ('SHO' 'INI' 'SHH') -- AND A.介護請求区分 IN ('SHO'(償還)'INI'(受領委任)'SHH'(生保(国保90/公費10))
) t1 -- 役所申請情報サブクエリ A
INNER JOIN
(
SELECT
t22.moto_uriage_denpyou_no AS denpyouNo -- B.元売上伝票番号 AS 伝票番号
t21.seikyuu_tokuisaki_cd AS tokuisakiCd -- A.請求得意先コード AS 得意先コード
t22.kokyaku_cd AS kokyakuCd -- B.顧客コード
t21.konkai_seikyuu_ac AS seikyuuAc -- A.今回請求額 AS 請求額
TO_CHAR(t22.uriage_dt 'yyyy/MM/dd') AS uriageDt -- B.売上日
'1' AS uriage -- '1' AS 売上
t21.tantousha_cd AS tantoushaCd -- A.担当者コード
t25.naibusashizu_tx AS naibusashizuTx -- E.内部指図
t23.juchuu_no AS juchuuNo -- C.受注番号 AS 受注番号
t22.uriage_denpyou_no AS uriageDenpyouNo -- A.売上伝票番号
TO_CHAR(t21.shuturyokuzumi_fg) AS shuturyokuzumiFg -- A.出力済フラグ
t25.jichitai_futan_rt AS jichitaiFutanRt -- E.自治体負担率
t21.busho_cd AS uriageBushoCd -- A.部署コード AS 売上部署コード
t21.seikyuusho_no AS seikyuushoNo -- A.請求書番号
t28.uriageShuseiFg AS uriageShuseiFg -- H.売上修正フラグ
t21.version_no AS versionNo -- バージョン番号
FROM
t_tokuisaki_seikyuu t21 -- 得意先請求 A
INNER JOIN (
SELECT
t281.seikyuusho_no -- t281.請求書番号
MAX(t281.uriage_denpyou_no) AS uriageDenpyouNo -- MAX(t281.売上伝票番号) AS 売上伝票番号
CASE WHEN COUNT(t281.uriage_denpyou_no) >= 2 -- CASE WHEN COUNT(t281.売上伝票番号) >= 2
THEN '1' -- THEN '1'
ELSE '0' -- ELSE '0'
END AS uriageShuseiFg -- END AS 売上修正フラグ
FROM
t_tokuisaki_seikyuu_uriage t281
WHERE
t281.delete_fg = '0'
GROUP BY
t281.seikyuusho_no
) t28 -- INNER JOIN 得意先請求売上サブクエリ H

ON t21.seikyuusho_no = t28.seikyuusho_no -- ON A.請求書番号 = H.請求書番号
INNER JOIN
t_tokuisaki_seikyuu_uriage t22 -- INNER JOIN 得意先請求売上 B
ON
t28.uriageDenpyouNo = t22.uriage_denpyou_no -- ON H.売上伝票番号 = B.売上伝票番号
AND
t22.delete_fg = '0' -- AND B.削除フラグ = '0'(通常)
INNER JOIN
t_uriage t23 -- INNER JOIN 売上 C
ON
t22.uriage_denpyou_no = t23.uriage_denpyou_no -- ON B.売上伝票番号 = C.売上伝票番号
AND
t23.delete_fg = '0' -- AND C.削除フラグ = '0'(通常)
INNER JOIN
t_juchuu_shukka t25 -- INNER JOIN 受注出荷 E
ON
t23.juchuu_no = t25.juchuu_no -- ON C.受注番号 = E.受注番号
AND
t25.delete_fg = '0' -- AND E.削除フラグ = '0'(通常)
UNION
SELECT
t21.juchuu_no AS denpyouNo -- A.受注番号 AS 伝票番号
t21.tokuisaki_cd AS tokuisakiCd -- A.得意先
t21.kokyaku_cd AS kokyakuCd -- A.顧客コード
t21.kouhi_tougetu_rental_ac + t21.jikofutan_tougetu_rental_ac + t21.jichitai_tougetu_rental_ac AS seikyuuAc -- A.公費当月レンタル料 + A.自己負担当月レンタル料 + A.自治体当月レンタル料 AS 請求額
TO_CHAR(t22.katudou_yotei_dt 'yyyy/MM/dd') AS uriageDt -- B.活動予定日 AS 売上日
'0' AS uriage -- '0' AS 売上
t21.uriage_tantousha_cd AS tantoushaCd -- A.売上担当者コード AS 担当者コード
t21.naibusashizu_tx AS naibusashizuTx -- A.内部指図
t21.juchuu_no AS juchuuNo -- C.受注番号 AS 受注番号
'' AS uriageDenpyouNo -- '' AS 売上伝票番号
'' AS shuturyokuzumiFg -- '' AS 出力済フラグ
t21.jichitai_futan_rt AS jichitaiFutanRt -- A.自治体負担率
t21.uriage_busho_cd AS uriageBushoCd -- A.売上部署コード
NULL AS seikyuushoNo
'0' AS uriageShuseiFg -- H.売上修正フラグ
NULL AS versionNo -- バージョン番号
FROM
t_juchuu_shukka t21 -- 受注出荷 A
LEFT OUTER JOIN
t_haisou_haibun t22 -- LEFT OUTER JOIN 配送配分 B
ON
t21.juchuu_no = t22.haisou_katudou_denpyou_no -- ON A.受注番号 = B.伝票番号
AND
t22.haisha_gyoumu_dv = '001' -- AND B.配車業務区分 = '001'(受注)
AND
t22.delete_fg = '0' -- AND B.削除フラグ = '0'(通常)
WHERE
SUBSTR(t21.uriage_dv_cd1 4) = 'HB02' -- WHERE SUBSTR(A.売上区分コード14) = 'HB02'(特定福祉)
AND t21.uriage_keijouzumi_fg = '1' -- AND A.売上計上済フラグ = '1'(計上済)
AND t21.delete_fg = '0' -- AND A.削除フラグ = '0'(通常)
AND NOT EXISTS (
SELECT
1
FROM
t_uriage t23 -- 売上 C
INNER JOIN
t_tokuisaki_seikyuu_uriage t24 -- 得意先請求売上 D
ON
t23.uriage_denpyou_no = t24.uriage_denpyou_no
WHERE
t21.juchuu_no = t23.juchuu_no
AND t23.delete_fg = '0'
)
) t2 -- INNER JOIN 売上情報サブクエリ B
ON
t1.tokuisakiCd = t2.tokuisakiCd -- ON A.得意先 = B.得意先
AND
(
(t1.kaigoSeikyuuDv = 'SHO' AND t2.jichitaiFutanRt = 0) -- (A.介護請求区分 = 'SHO'(償還) AND B.自治体負担率 = 0)
OR
(t1.kaigoSeikyuuDv IN ('INI''SHH') AND t2.jichitaiFutanRt <> 0)-- (A.介護請求区分 IN ('INI''SHH') AND B.自治体負担率 <> 0)
)
LEFT OUTER JOIN
(
SELECT
t53.moto_uriage_denpyou_no -- C.元売上伝票番号
t53.juchuu_no -- C.受注番号
MAX(t51.seikyuusho_insatu_no) AS seikyuushoInsatuNo -- MAX(請求書印刷番号) AS 請求書印刷番号
MAX(t52.uriage_denpyou_no) AS uriageDenpyouNo -- MAX(売上伝票番号) AS 売上伝票番号
t54.chouhyou_template_dv -- D.帳票テンプレート区分
FROM
t_hokenja_shinseisho t51 -- 保険者申請書 A

LEFT OUTER JOIN
t_tokuisaki_seikyuu_uriage t52 -- 得意先請求売上 B

ON
t51.seikyuusho_insatu_no = t52.seikyuusho_no -- A.請求書番号 = B.請求書番号 QA....... A.請求書番号が保険者申請書 A中でないです。ご確認してお願いします。
AND
t52.delete_fg = '0' -- B.削除フラグ = '0'(通常)
LEFT OUTER JOIN
t_uriage t53 -- 売上 C
ON
t52.uriage_denpyou_no = t53.uriage_denpyou_no -- B.売上伝票番号 = C.売上伝票番号
AND
t53.delete_fg = '0' -- C.削除フラグ = '0'(通常)

LEFT OUTER JOIN
(
SELECT
t541.file_id -- A.ファイルID
t541.chouhyou_template_dv -- A.テンプレート区分
FROM
m_tokuisaki_template t541 -- 得意先別帳票テンプレート(A)
WHERE
t541.delete_fg = '0' -- A.削除フラグ = '0'
UNION
SELECT
t541.file_id -- A.ファイルID
t541.chouhyou_template_dv -- A.テンプレート区分
FROM
m_busho_template t541 -- 部署別帳票テンプレート(A)
WHERE
t541.delete_fg = '0' -- A.削除フラグ = '0
) t54 -- 帳票テンプレートサブクエリ D
ON
t51.seikyuusho_template_file_id = t54.file_id -- A.請求書テンプレートID = D.ファイルID

WHERE
t51.delete_fg = '0' -- A.削除フラグ = '0'(通常)
GROUP BY
t53.moto_uriage_denpyou_no -- C.元売上伝票番号
t53.juchuu_no -- C.受注番号
t54.chouhyou_template_dv -- D.帳票テンプレート区分
) t5 -- 直近申請サブクエリ E

ON
t2.juchuuNo = t5.juchuu_no -- B.受注番号 = E.受注番号
AND
t2.denpyouNo = t5.uriageDenpyouNo--B.伝票番号 = E.売上伝票番号
AND
(
(t1.jizenShikyuuHandan = '1' AND t5.chouhyou_template_dv = 'TJS') OR (t1.jizenShikyuuHandan = '0' AND t5.chouhyou_template_dv = 'TSS')
)

解决方案

max字段不是group by的字段。后面你用到的max的子句中还有类似情况。

 t281.seikyuusho_no -- t281.請求書番号 MAX(t281.uriage_denpyou_no) AS uriageDenpyouNo -- MAX(t281.売上伝票番号) AS 売上伝票番号 CASE WHEN COUNT(t281.uriage_denpyou_no) >= 2 -- CASE WHEN COUNT(t281.売上伝票番号) >= 2THEN '1' -- THEN '1'ELSE '0' -- ELSE '0'END AS uriageShuseiFg -- END AS 売上修正フラグFROMt_tokuisaki_seikyuu_uriage t281WHEREt281.delete_fg = '0'GROUP BYt281.seikyuusho_no
时间: 2025-01-25 22:55:18

select-ORACLE SQL 无聚合函数 和 有聚合函数 左外连 报不是 GROUP BY 表达式的错误的相关文章

深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外联接.外联接可以是左向外联接.右向外联接或完整外部联接.     在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT OUTER JOIN     左向外联接的结果集包括  LEF

sql语句多表查询中聚合函数的使用问题

问题描述 sql语句多表查询中聚合函数的使用问题 表A,B,C. A表中有title,code, b表中为code,media_code;(均不为主键,code会有重复) c表中有media_code,shrink (media_code为主键) 我的目的为取出A表中的title和c表中的shrink 联立:A.code→B.code, B.media_code→C.media_code 代码如下 select title,shrink from tableA,tableC where medi

ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE PL/SQL编程之八:把触发器说透 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的.   本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 

oracle sql求教函数传参数问题

问题描述 oracle sql求教函数传参数问题 例如我有个表,我需要里面很多字段作为参数传到函数中.我只知道2种方法1.需要多少字段就设多少参数,但参数太多不想这么写2.或者只传个主键或rowid什么的进去再里面查询,但再查询怕影响速度. 求教有没方法能把整行数据都传进去,像触发器那样new.字段名 old.字段名能把数据取回来 解决方案 有没方法能把整行数据都传进去,像触发器那样new.字段名 old.字段名能把数据取回来 这样其实后台还是查询了一次,只不过是从内存中查,我建议你用第一个方法

oracle sql语句性能优化

oracle|性能|优化|语句 1.选用适合的ORACLE优化器ORACLE的优化器共有3种 A.RULE (基于规则) b.COST (基于成本) c.CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) ,

Oracle SQL tuning 数据库优化步骤图文教程

  SQL Turning 是Quest公司出品的Quest Central软件中的一个工具.Quest Central是一款集成化.图形化.跨平台的数据库管理解决方案,可以同时管理 Oracle.DB2 和 SQL server 数据库. 一.SQL Tuning for SQL Server简介 SQL语句的优化对发挥数据库的最佳性能非常关键.然而不幸的是,应用优化通常由于时间和资源的因素而被忽略.SQL Tuning (SQL优化)模块可以对比和评测特定应用中SQL语句的运行性能,提出智能

Oracle SQL性能优化

(1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.(2)      WHERE子句中的连接顺序.: ORACLE采用自下而上

Oracle SQL

1         Oracle简介 一个 Oracle 服务器: 是一个数据管理系统(RDBMS),它提供开放的, 全面的, 近乎完整的信息管理 由一个 Oracle 实例 和一个 Oracle 数据库组成 Oracle 数据库 和 Oracle 实例 Oracle 服务器由两大部分组成, Oracle 数据库 和 Oracle 实例. Oracle 数据库: 位于硬盘上实际存放数据的文件, 这些文件组织在一起, 成为一个逻辑整体, 即为 Oracle 数据库. 因此在 Oracle 看来,

ORACLE SQL*PLUS 命令大全

来源:http://www.cnblogs.com/kerrycode/archive/2011/06/09/2076248.html ---1: HELP INDEXHELP 命令查询相关命令的信息. 你可以从下面看到大概有54个SQL*PLUS命令.每个命令都有大量的参数选项,你不可能清楚的记得每个命令 以及它相关的参数细节,所以当你遗忘时,就可以用HELP命令来查看相关命令的命令信息 SQL> HELP INDEX Enter Help [topic] for help.  @