Sql oracle计算两列求和时如何修正错误值
我在oracle中使用CTE计算两个别名为2的列的值。然后我加上2个别名。 这是我的桌子: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 (
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
子句),而主查询不应该使用交叉连接
,而是内部连接
bydelvry\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语句中,并由所有其他未聚合的列进行分组。您可以尝试另一种方法吗?