Base: SQL : Sort and Group on multiple columns

From the sample database,
0037FirebirdSQLGroup.odb (4.9 KB)
0037FirebirdSQLGroup.ods (17.7 KB)

Query: TrialBalanceWithDate

SELECT 
"JND"."AccountCodeLevel1" "AC1", 
"JND"."AccountCodeLevel2" "AC2", 
"JND"."AccountCodeLevel3" "AC3", 
( COALESCE ( "JND"."DebitAmount", 0 ) ) - ( COALESCE ( "JND"."CreditAmount", 0 ) ) "DRCR" 
FROM 
"JournalDetail" "JND", 
"JournalNumber" "JNN" 
WHERE 
"JND"."JournalNumber" = "JNN"."Batch" 
AND 
"JNN"."TransactionDate" >= '2022-07-01' 
AND 
"JNN"."TransactionDate" <= '2022-07-31' 
ORDER BY 
"AC1" ASC, 
"AC2" ASC, 
"AC3" ASC, 
"JNN"."TransactionDate" ASC

The result:

AC1 AC2 AC3 DRCR
1 1 1 -1200
1 1 1 5000
1 1 1 -13700
1 2 1 1200
1 5 1 1500
2 2 3 -1500
4 1 1 -5000
5 1 5 4200
5 1 5 4500
5 7 1 5000

How can I group AC1, AC2 and AC3 and get the result like this ?

AC1 AC2 AC3 DRCR
1 1 1 -9900
1 2 1 1200
1 5 1 1500
2 2 3 -1500
4 1 1 -5000
5 1 5 8700
5 7 1 5000

Query: TrialBalanceWithPeriod

SELECT 
CAST( EXTRACT( YEAR FROM CAST( "JNN"."TransactionDate" AS DATE ) ) * 100 + EXTRACT( MONTH FROM CAST( "JNN"."TransactionDate" AS DATE ) ) * 1 AS VARCHAR ( 6 ) ) "PRD", 
"JND"."AccountCodeLevel1" "AC1", 
"JND"."AccountCodeLevel2" "AC2", 
"JND"."AccountCodeLevel3" "AC3", 
( COALESCE ( "JND"."DebitAmount", 0 ) ) - ( COALESCE ( "JND"."CreditAmount", 0 ) ) "DRCR" FROM 
"JournalDetail" "JND", 
"JournalNumber" "JNN" 
WHERE 
"JND"."JournalNumber" = "JNN"."Batch" 
AND 
"JNN"."TransactionDate" >= '2022-07-01' 
AND 
"JNN"."TransactionDate" <= '2022-08-31' 
ORDER BY 
"PRD" ASC, 
"AC1" ASC, 
"AC2" ASC, 
"AC3" ASC

The result:

PRD AC1 AC2 AC3 DRCR
202207 1 1 1 -1200
202207 1 1 1 -13700
202207 1 1 1 5000
202207 1 2 1 1200
202207 1 5 1 1500
202207 2 2 3 -1500
202207 4 1 1 -5000
202207 5 1 5 4200
202207 5 1 5 4500
202207 5 7 1 5000
202208 1 1 1 -3000
202208 1 1 1 6000
202208 1 1 1 9600
202208 2 2 3 3000
202208 4 1 1 -6000
202208 4 1 1 -9600

How can I group AC1, AC2 and AC3 and get the result like this ?

PRD AC1 AC2 AC3 DRCR
202207 1 1 1 -9900
202207 1 2 1 1200
202207 1 5 1 1500
202207 2 2 3 -1500
202207 4 1 1 -5000
202207 5 1 5 8700
202207 5 7 1 5000
202208 1 1 1 12600
202208 2 2 3 3000
202208 4 1 1 -15600

LibreOffice:
Version: 7.3.7.2 / LibreOffice Community
Build ID: 30(Build:2)
CPU threads: 4; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: en-US (en_US.UTF-8); UI: en-US
Ubuntu package version: 1:7.3.7-0ubuntu0.22.04.1
Calc: threaded

Base: Firebird

OS:
Ubuntu 22.04

1 Like

Hello,
Like (first example):

Select AC1, AC2, AC3, sum(DRCR)from
(SELECT "JND"."AccountCodeLevel1" "AC1",
       "JND"."AccountCodeLevel2" "AC2",
       "JND"."AccountCodeLevel3" "AC3",
       (COALESCE("JND"."DebitAmount",0)) -(COALESCE("JND"."CreditAmount",0)) "DRCR"
FROM "JournalDetail" "JND",
     "JournalNumber" "JNN"
WHERE "JND"."JournalNumber" = "JNN"."Batch"
AND   "JNN"."TransactionDate" >= '2022-07-01'
AND   "JNN"."TransactionDate" <= '2022-07-31')
Group by AC1,AC2,AC3
ORDER BY "AC1" ASC,
         "AC2" ASC,
         "AC3" ASC

Giving:


.
Second should be similar. BTW, with this, it is not of any use to have in ORDER BY:

 "JNN"."TransactionDate" ASC

Edit - second:

Select PRD, AC1, AC2, AC3, SUM(DRCR) DRCR from
(SELECT CAST(EXTRACT(YEAR FROM CAST("JNN"."TransactionDate" AS DATE))*100 +EXTRACT(MONTH FROM CAST("JNN"."TransactionDate" AS DATE))*1 AS VARCHAR(6)) "PRD",
       "JND"."AccountCodeLevel1" "AC1",
       "JND"."AccountCodeLevel2" "AC2",
       "JND"."AccountCodeLevel3" "AC3",
       (COALESCE("JND"."DebitAmount",0)) -(COALESCE("JND"."CreditAmount",0)) "DRCR"
FROM "JournalDetail" "JND",
     "JournalNumber" "JNN"
WHERE "JND"."JournalNumber" = "JNN"."Batch"
AND   "JNN"."TransactionDate" >= '2022-07-01'
AND   "JNN"."TransactionDate" <= '2022-08-31')
Group By PRD, AC1, AC2, AC3
ORDER BY "PRD" ASC,
         "AC1" ASC,
         "AC2" ASC,
         "AC3" ASC
1 Like