如何在group_concat中使用sum和join

时间:2015-02-01 11:11:41

标签: sqlite

我有两个表,CustomerCategories和Articles。两个表都有一个名为VatPercentage和VatPrice的列。

方案:

  • 如果两个表中都存在相同的vatpercentage,我想要将两个表中的vatprice相加并将其添加到字符串中。
  • 如果vatpercentage仅存在于CustomerCategories表中,我想从此处汇总vatprice并将其添加到字符串中。
  • 如果vatpercentage只存在于Articles表中,我想从此处汇总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 个答案:

答案 0 :(得分: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)