我試圖抓取多個結果,但將其分組到一個結果並給出某些類別的總體計數。當我用我的企圖做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