我試圖對各種總計應用折扣。每個折扣都有自己的折扣代碼,所以我想將代碼應用到它的等價總額。但有時這些代碼可能會出現多次。如果是這樣,我想對摺扣代碼進行彙總以產生一個折扣。當我加入另一個表時,錯誤的SUM
我的第一次嘗試是這是不正確的,但顯示了我剛纔試圖解釋,即。出現折扣碼不止一次:
SELECT bdto.dto_fac_cod_descuento,
COUNT(bdto.dto_fac_cod_descuento) howmany,
CASE
WHEN COUNT(bdto.dto_fac_cod_descuento) > 1
THEN ABS (ROUND (SUM(bdto.dto_fac_importe_dto), 0))
ELSE ABS (ROUND (bdto.dto_fac_importe_dto, 0))
END AS descuento
FROM
bren_descuentos bdto
GROUP BY bdto.dto_fac_cod_descuento, bdto.dto_fac_importe_dto
dto_fac_cod_descuento howmany descuento
714 1 4274.00
X23 1 4040.00
X23 1 3300.00
X23 1 2800.00
336 1 2584.00
E35 1 2519.00
713 1 1458.00
335 1 920.00
G07 1 610.00
M48 1 350.00
715 1 310.00
368 2 450.00
G07 1 94.00
168 1 70.00
349 1 62.00
X73 1 20.00
BN3 1 10.00
M47 1 2.00
A40 2 0.00
S11 1 0.00
想來想去,我現在有以下查詢,給了我正確的答案(我懷疑的代碼是它可能是最好的,但不關我的事,現在)
SELECT bdto.dto_fac_cod_descuento,
CASE
WHEN COUNT(bdto.dto_fac_cod_descuento) > 1
THEN
ABS (ROUND (SUM(bdto.dto_fac_importe_dto), 0))
ELSE
(SELECT ABS (dto_fac_importe_dto) FROM bren_descuentos bd
WHERE bdto.dto_fac_cod_descuento = bd.dto_fac_cod_descuento)
END AS descuento
FROM
bren_descuentos bdto
GROUP BY bdto.dto_fac_cod_descuento
dto_fac_cod_descuento descuento
168 70.44
335 919.85
336 2584.31
349 62.16
368 450.00
713 1458.05
714 4273.73
715 309.62
A40 0.00
BN3 10.00
E35 2519.00
G07 704.00
M47 2.46
M48 349.77
S11 0.00
X23 10140.00
X73 20.00
我的問題是我需要加入另一個表作爲此查詢僅僅是我所需要的一部分,當我申請的JOIN,我的成績就會失控,我不知道如何解決它!
隨着JOIN應用我得到這個:
SELECT bdto.dto_fac_cod_descuento,
CASE
WHEN COUNT(bdto.dto_fac_cod_descuento) > 1
THEN
ABS (ROUND (SUM(bdto.dto_fac_importe_dto), 0))
ELSE
(SELECT ABS (dto_fac_importe_dto) FROM bren_descuentos bd
WHERE bdto.dto_fac_cod_descuento = bd.dto_fac_cod_descuento)
END AS descuento
FROM bren_detalle bdet
JOIN
bren_descuentos bdto
ON bdet.det_unidad_medida = 'megabytes'
GROUP BY bdto.dto_fac_cod_descuento
dto_fac_cod_descuento descuento
168 318177.00
335 4154962.00
336 11673328.00
349 280777.00
368 2032650.00
713 6586012.00
714 19304438.00
715 1398554.00
A40 0.00
BN3 45170.00
E35 11378323.00
G07 3179968.00
M47 11112.00
M48 1579911.00
S11 0.00
X23 45802380.00
X73 90340.00
@Dukeling與 「全」 代碼JOIN:
SELECT bdet.det_tipo_trafico tipo_trafico,
COUNT (bdet.det_tipo_trafico) total_numero,
ROUND (SUM (bdet.det_cantidad_medida_originada + bdet.det_cantidad_medida_recibida), 0) total_megas,
ROUND (SUM (bdet.det_importe), 2) total_importe,
ABS (ROUND (SUM(bdto.dto_fac_importe_dto), 0)) AS descuento,
ROUND ((SUM (bdet.det_cantidad_medida_originada + bdet.det_cantidad_medida_recibida))/NULLIF (COUNT (bdet.det_tipo_trafico), 0), 0) mb_conxn
FROM bren_detalle bdet
JOIN
bren_descuentos bdto
ON bdet.det_unidad_medida = 'megabytes'
AND bdet.dto_fac_cod_descuento = bdto.dto_fac_cod_descuento
GROUP BY bdet.det_tipo_trafico, bdto.dto_fac_importe_dto, bdto.dto_fac_cod_descuento
給出了這樣的結果:
tipo_trafico total_numero total_megas total_importe descuento mb_conxn
DATOS EN ITINERANCIA 224 2176 653,88 0.00 10
MENSAJES MULTIMEDIA EN ITINERA 1 0 0,7 10.00 0
DATOS INTERNET 4389 38338 1789,19 412566.00 9
MENSAJES MULTIMEDIA 15 2 6,36 37785.00 0
DATOS INTERNET 4389 38338 1789,19 2677290.00 9
,你可以看到我得到兩個「DATOS互聯網」,因爲有兩個不同的descuento值,它不能算出它們。此外它還給出了一個很大數量的折扣,它總結了太多次。的bren_detalle內容
例(有更多的列,但我不使用它們)
det_tipo_trafico det_unidad_medida det_importe dto_fac_cod_descuento dto_fac_cod_descuento2
TRAFICO NAC.OTROS OPER.MOVILES Minutos 3,6588 714 368
TRAFICO NAC.OTROS OPER.MOVILES Minutos 1,4035 714 368
DATOS INTERNET Megabytes 0,0583 G07 NULL
TRAFICO NAC.OTROS OPER.MOVILES Minutos 8,756 714 368
TRAFICO NAC.OTROS OPER.MOVILES Minutos 0,5195 714 368
DATOS INTERNET Megabytes 0,0097 G07 NULL
INTERNO CORPORATIVO Minutos 0,1758 335 368
INTERNO CORPORATIVO Minutos 0,2617 335 368
TRAFICO NAC.OTROS OPER.MOVILES Minutos 1,8313 714 368
INTERNO MOVILES Minutos 1,5993 336 368
TRAFICO NAC.OTROS OPER.MOVILES Minutos 1,2165 714 368
INTERNACIONAL Minutos 1,541 M48 NULL
TRAFICO NAC.OTROS OPER.MOVILES Minutos 1,2108 714 368
DATOS INTERNET Megabytes 0,3351 G07 NULL
DATOS INTERNET Megabytes 0,9028 G07 NULL
DATOS INTERNET Megabytes 0,0102 G07 NULL
RESTO DE TRAFICO NACIONAL Minutos 2,4196 715 368
DATOS INTERNET Megabytes 0,0271 G07 NULL
TRAFICO NAC.OTROS OPER.MOVILES Minutos 2,8372 714 368
DATOS INTERNET Megabytes 0,1574 G07 NULL
bren_descuentos表的內容(同樣有更多的列,但不使用):
dto_fac_cod_descuento dto_fac_importe_dto
S11 0.00
A40 0.00
BN3 -10.00
G07 -94.00
X23 -4040.00
168 -70.44
335 -919.85
336 -2584.31
349 -62.16
368 -225.00
368 -225.00
713 -1458.05
714 -4273.73
715 -309.62
A40 0.00
E35 -2519.00
M47 -2.46
M48 -349.77
X23 -3300.00
G07 -610.00
X23 -2800.00
X73 -20.00
舉一個例子,折扣代碼G07與DATOS INTERNET流量一起使用,所以我應該有610 + 94 = 704的總折扣。
編輯我原來的職位。 – TheDon 2013-03-01 12:08:40
@TheDon您可以顯示錶格中的數據(至少是一些例子)嗎? – Dukeling 2013-03-01 12:10:21
@TheDon請參閱編輯。 – Dukeling 2013-03-04 07:45:19