2015-02-01 2 views
1

У меня есть две таблицы, рубрики CustomerCategories и статьи. Обе таблицы имеют столбец VatPercentage и VatPrice.Как использовать суммы и объединения в group_concat

Сценарии:

  • В случае же vatpercentage существует в обеих таблицах я хочу суммировать vatprice из обеих таблиц и добавить его в строку.
  • В случае, когда vatpercentage существует только в таблице CustomerCategories, я хочу суммировать vatprice отсюда и добавить его в строку.
  • В случае, если vatpercentage существует только в таблице статей, я хочу здесь суммировать vatprice и добавить его в строку.

Пример таблицы:

Статьи:

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 

В результате я хочу обратно из запроса в этом са себе:

{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} 

код я уже пытаюсь без каких-либо положительных результатов:

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 

Помощь будет оценена.

Fiddle

ответ

1

Во-первых, combine обе таблицы:

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 

Затем сделать простой GROUP BY над этим:

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 

Затем сделать экранирующих символов беспорядок на результат из этого:

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) 
+0

Большое вам спасибо :) Возможно ли сделать это в порядке возрастания? Я попытался добавить заказ после Group, но он не сортирует. – Henrik

+0

Строки сравниваются лексикографически, а не как номера. –

Смежные вопросы