我试图抓取多个结果,但将其分组到一个结果并给出某些类别的总体计数。当我用我的企图做SQL GROUP BY时,我只能得到MAX值。我需要每个设备的总订单数量。使用SQL GROUP BY,但仍然需要所有值(不只是MAX值)
Desktops - 2
Laptops - 5
MSSQL查询:
SELECT
m.SDDOCO as salesorder,
MAX(m.SDPA8) as customerid,
MAX(m.SDNXTR) as status,
MAX(m.SDSRP1) as device,
MAX(m.SDUORG) as orderqty,
MAX(a.ABALPH) as customername,
MAX(d.DEDATE02) as shipbydate,
CASE WHEN MAX(m.SDSRP1)='DES' THEN MAX(m.SDUORG) ELSE 0 END AS desktops,
CASE WHEN MAX(m.SDSRP1)='NTB' THEN MAX(m.SDUORG) ELSE 0 END AS notebooks,
CASE WHEN MAX(m.SDSRP1)='MON' THEN MAX(m.SDUORG) ELSE 0 END AS monitors
FROM $JDE_F4211 m, $JDE_F554211 d, $JDE_F0101 a
WHERE
d.DEDOCO=m.SDDOCO AND
d.DEDCTO=m.SDDCTO AND
d.DEKCOO=m.SDKCOO AND
d.DELNID=m.SDLNID AND
m.SDPA8=a.ABAN8 AND
LTRIM(RTRIM(m.SDDCTO)) = 'SO' AND
(LTRIM(RTRIM(m.SDLNTY)) = 'WC' OR
LTRIM(RTRIM(m.SDLNTY)) = 'S') AND
LTRIM(RTRIM(m.SDMCU)) <> 'RLG' AND
m.SDNXTR<980
GROUP BY m.SDDOCO
ORDER BY m.SDDOCO DESC
SQL结果不进行分组:
[0] => Array
(
[salesorder] => 3238404
[customerid] => 142578
[status] => 530
[device] => NTB
[orderqty] => 5
[customername] => CUSTOMER1
[shipbydate] => 0
)
[1] => Array
(
[salesorder] => 3238404
[customerid] => 142578
[status] => 530
[device] => DES
[orderqty] => 2
[customername] => CUSTOMER1
[shipbydate] => 0
)
SQL GROUP BY输出:
[0] => Array
(
[salesorder] => 3238404
[customerid] => 142578
[status] => 530
[device] => NTB
[orderqty] => 5
[customername] => CUSTOMER1
[shipbydate] => 0
[desktops] => 0.0
[notebooks] => 5
[monitors] => 0.0
)
作为OP想'每个device'的总orderqty,IMO的'MAX'应更改为'SUM'为'SDUORG' –
@ PhamX.Bach。 。 。我同意。我使用了MAX(),因为这是OP在他/她的查询中所做的。 –
谢谢 - 这完美的作品。顺便说一句..你有一个额外的)在第一个SUM(CASE行前ELSE 0 END ...导致语法错误。 – rubberchicken