Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 oracle计算两列求和时如何修正错误值_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql oracle计算两列求和时如何修正错误值

Sql oracle计算两列求和时如何修正错误值,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我在oracle中使用CTE计算两个别名为2的列的值。然后我加上2个别名。 这是我的桌子: DELVRY_NO ITM_NAME TOTAL_QUANTITY PACKING_STYLE QUANTITY_IN_FULL_CTN DVR20101900006 CHP-671R 61 30 60 这是我的疑问: WITH BOXCOUNT AS (

我在oracle中使用CTE计算两个别名为2的列的值。然后我加上2个别名。 这是我的桌子:

DELVRY_NO        ITM_NAME       TOTAL_QUANTITY      PACKING_STYLE    QUANTITY_IN_FULL_CTN
DVR20101900006   CHP-671R           61                   30                  60
这是我的疑问:

WITH BOXCOUNT AS (                                                         
   SELECT ROUND(SUM(TOTAL_QUANTITY/PACKING_STYLE)) AS FULLBOX
 , ROUND(SUM(TOTAL_QUANTITY - QUANTITY_IN_FULL_CTN)) AS SPAREBOX 
FROM LOG0055D)
SELECT
    L55.DELVRY_NO
    , L55.ITM_NAME
    , L55.TOTAL_QUANTITY
    , L55.PACKING_STYLE
    , L55.QUANTITY_IN_FULL_CTN
    , BC.FULLBOX
    , BC.SPAREBOX
    ,SUM(BC.FULLBOX + BC.SPAREBOX) AS TOTALBOX
 FROM LOG0055D L55, BOXCOUNT BC
 WHERE DELVRY_NO  = 'DVR20101900006'
 GROUP BY 
     L55.DELVRY_NO
     , L55.ITM_NAME
     , L55.TOTAL_QUANTITY
     , L55.PACKING_STYLE
     , L55.QUANTITY_IN_FULL_CTN
     , BC.FULLBOX
     , BC.SPAREBOX
运行查询时,结果如下所示:

DELVRY_NO       ITM_NAME  TOTAL_QUANTITY  PACKING_STYLE QUANTITY_IN_FULL_CTN  FULLBOX    SPAREBOX   TOTALBOX
DVR20101900006  CHP-671R      61               30            60               956          3077    4033
“FULLBOX”、“SPAREBOX”和“TOTALBOX”似乎是错误的值,例如:

FULLBOX   SPAREBOX   TOTALBOX
  2          1           3

如何解决这些问题?很多人都感谢我,CTE似乎遗漏了
delvry\u no
列(以及
group by
子句),而主查询不应该使用
交叉连接
,而是
内部连接
by
delvry\u no
。大概是这样的:

WITH
   boxcount
   AS
      (  SELECT delvry_no,
                ROUND (SUM (total_quantity / packing_style)) AS fullbox,
                ROUND (SUM (total_quantity - quantity_in_full_ctn)) AS sparebox
           FROM log0055d
       GROUP BY delvry_no)
  SELECT l55.delvry_no,
         l55.itm_name,
         l55.total_quantity,
         l55.packing_style,
         l55.quantity_in_full_ctn,
         bc.fullbox,
         bc.sparebox,
         SUM (bc.fullbox + bc.sparebox) AS totalbox
    FROM log0055d l55 JOIN boxcount bc ON bc.delvry_no = l55.delvry_no
   WHERE l555.delvry_no = 'DVR20101900006'
GROUP BY l55.delvry_no,
         l55.itm_name,
         l55.total_quantity,
         l55.packing_style,
         l55.quantity_in_full_ctn,
         bc.fullbox,
         bc.sparebox

哦,我忘了在CTE中没有选择delvry_no in子句,这就是我得到错误结果的原因Hank@lLittefoot^^hi@Littlefoot:在这种情况下,我是否有另一种方法不使用join?将聚合包含到“only”select语句中,并由所有其他未聚合的列进行分组。您可以尝试另一种方法吗?