Henrik
Henrik

Reputation: 1807

How to use sum and joins within group_concat

I have two tables, CustomerCategories and Articles. Both tables have a column called VatPercentage and VatPrice.

Scenarios:

Example tables:

Articles:

ArticleId       TotalPrice      VatPercentage    VatPrice
1                   100         25.0000000000    25
2                   80          25.0000000000    20
3                   50          8.0000000000     4
4                   70          8.0000000000     5.6
5                   20          0                0
6                   0           0                0

CustomerCategories:

CustomerCategoryId  TotalPrice  VatPercentage   VatPrice
2                   163         8.0000000000    13
2                   163         13.0000000000   13
2                   163         0               0
2                   150         25.0000000000   37.5

The result i want back from the Query in this case:

{esc}{40h}25 %{esc}{41h}82.5 NOK{lf}{esc}{40h}8 %{esc}{41h}22.6 NOK{lf}{esc}{40h}13 %{esc}{41h}13 NOK{lf}

The code i've trying without any positive results is:

SELECT GROUP_CONCAT(Result, '|') Results
FROM (
   select case when cc.VatPercentage = a.VatPercentage 
   then
   SELECT '{esc}{40}' || CAST(cc.VatPercentage AS INTEGER) || '% ' ||
           (SUM(cc.VatPrice) + SUM(a.VatPrice)) || ' NOK' || '{lf}' Result    end
else
   (
     case when cc.VatPercentage <> a.VatPercentage
       then 
       SELECT '{esc}{40}' || CAST(cc.VatPercentage AS INTEGER) || '% ' ||
           (SUM(cc.VatPrice) + SUM(a.VatPrice)) || ' NOK' || '{lf}' ||
           SELECT '{esc}{40}' || CAST(a.VatPercentage AS INTEGER) || '% ' ||
           (SUM(a.VatPrice)) || ' NOK' || '{lf}' Result 
      end
   )
FROM CustomerCategories cc
LEFT JOIN Articles a
  on cc.VatPercentage = a.VatPercentage
WHERE 
  cc.VatPercentage != '0' 
  AND a.VatPercentage != '0'
  AND cc.TotalPrice != '0'
  AND a.TotalPrice != '0'
  GROUP BY 
    cc.VatPercentage OR a.VatPercentage) x

Help would be appreciated.

Fiddle

Upvotes: 1

Views: 71

Answers (1)

CL.
CL.

Reputation: 180020

First, combine both tables:

SELECT VatPercentage, VatPrice FROM CustomerCategories
UNION ALL
SELECT VatPercentage, VatPrice FROM Articles
VatPercentage   VatPrice
8.0000000000    13
13.0000000000   13
0               0
25.0000000000   37.5
25.0000000000   25
25.0000000000   20
8.0000000000    4
8.0000000000    5.6
0               0
0               0

Then do a simple GROUP BY over that:

SELECT VatPercentage,
       SUM(VatPrice) AS PriceSum
FROM (SELECT VatPercentage, VatPrice FROM CustomerCategories
      UNION ALL
      SELECT VatPercentage, VatPrice FROM Articles)
WHERE VatPercentage != '0'
GROUP BY VatPercentage

Then do the escape characters mess over the result of that:

SELECT GROUP_CONCAT('{esc}{40h}' || VatPercentage || ' %' ||
                    '{esc}{41h}' || VatPrice      || ' NOK{lf}',
                    '')
FROM (SELECT VatPercentage,
             SUM(VatPrice) AS PriceSum
      FROM (SELECT VatPercentage, VatPrice FROM CustomerCategories
            UNION ALL
            SELECT VatPercentage, VatPrice FROM Articles)
      WHERE VatPercentage != '0'
      GROUP BY VatPercentage)

Upvotes: 1

Related Questions