简体   繁体   中英

Group clause in SQL command

I have 3 tables: Deliveries, IssuedWarehouse, ReturnedStock.

Deliveries: ID, OrderNumber, Material, Width, Gauge, DelKG
IssuedWarehouse: OrderNumber, IssuedKG
ReturnedStock: OrderNumber, IssuedKG

What I'd like to do is group all the orders by Material, Width and Gauge and then sum the amount delivered, issued to the warehouse and issued back to stock.

This is the SQL that is really quite close:

SELECT 
    DELIVERIES.Material, 
    DELIVERIES.Width, 
    DELIVERIES.Gauge, 
    Count(DELIVERIES.OrderNo) AS [Orders Placed],
    Sum(DELIVERIES.DeldQtyKilos) AS [KG Delivered], 
    Sum(IssuedWarehouse.[Qty Issued]) AS [Film Issued], 
    Sum([Film Retns].[Qty Issued]) AS [Film Returned],
    [KG Delivered]-[Film Issued]+[Film Returned] AS [Qty Remaining]

FROM (DELIVERIES 
INNER JOIN IssuedWarehouse
    ON DELIVERIES.OrderNo = IssuedWarehouse.[Order No From]) 
INNER JOIN [Film Retns] 
    ON DELIVERIES.OrderNo = [Film Retns].[Order No From]
GROUP BY Material, Width, Gauge, ActDelDate
HAVING ActDelDate Between [start date] And [end date]
ORDER BY DELIVERIES.Material;

This groups the products almost perfectly. However if you take a look at the results:

Material    Width   Gauge   Orders Placed   Delivered Qnty Kilos    Film Issued Film Returned   Qty Remaining
COEX-GLOSS  590     75      1               534                     500         124             158
COEX-MATT   1080    80      1               4226                    4226        52              52
CPP         660     38      8               6720                    2768        1384            5336
CPP         666     47      1               5677                    5716        536             497
CPP         690     65      2               1232                    717         202             717
CPP         760     38      3               3444                    1318        510             2636
CPP         770     38      4               4316                    3318        2592            3590
CPP         786     38      2               672                     442         212             442
CPP         800     47      1               1122                    1122        116             116
CPP         810     47      1               1127                    1134        69              62
CPP         810     47      2               2250                    1285        320             1285
CPP         1460    38      12              6540                    4704        2442            4278
LD          975     75      1               502                     502         182             182
LDPE        450     50      1               252                     252         50              50
LDPE        520     70      1               250                     250         95              95
LDPE        570     65      2               504                     295         86              295
LDPE        570     65      2               508                     278         48              278
LDPE        620     50      1               252                     252         67              67
LDPE        660     50      1               256                     256         62              62
LDPE        670     75      1               248                     248         80              80
LDPE        690     47      1               476                     476         390             390
LDPE        790     38      2               2104                    1122        140             1122
LDPE        790     50      1               286                     286         134             134
LDPE        790     50      1               250                     250         125             125
LDPE        810     30      1               4062                    4062        100             100
LDPE        843     33      1               408                     408         835             835
LDPE        850     80      1               412                     412         34              34
LDPE        855     30      1               740                     740         83              83
LDPE        880     60      1               304                     304         130             130
LDPE        900     70      2               1000                    650         500             850
LDPE        1017    60      1               1056                    1056        174             174
OPP         25      1100    1               381                     381         95              95
OPP         1000    30      2               1358                    1112        300             546
OPP         1000    30      1               1492                    1491        100             101
OPP         1200    20      1               418                     417         461             462
PET         760     12      3               1227                    1876        132             -517

You'll see that there are some materials that have the same width and gauge yet they are not grouped. I think this is because the delivered qty is different on the orders. For example:

Material    Width   Gauge   Orders Placed   Delivered Qnty Kilos    Film Issued Film Returned   Qty Remaining
LDPE        620     50      1               252                     252         67               67
LDPE        660     50      1               256                     256         62               62

I would like these two rows to be grouped. They have the same material, width and gauge but the delivered qty is different therefore it hasn't grouped it.

Can anyone help me group these strange rows?

Your "problem" is that the deliveries occurred on different dates, and you're grouping by ActDelDate so the data splits, but because you haven't selected the ActDelDate column, this isn't obvious.

The fix is: Remove ActDelDate from the group by list


You should also remove the unnecessary brackets around the first join, and change

HAVING ActDelDate Between [start date] And [end date]

to

WHERE ActDelDate Between [start date] And [end date]

and have it before the GROUP BY

You are grouping by the delivery date, which is causing the rows to be split. Either omit the delivery date from the results and group by, or take the min/max of the delivery date.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM