在group_concat中使用sum

时间:2015-01-30 00:50:08

标签: sqlite

我们说我有一张桌子,产品。这包含几个具有不同vatpercentages和vatprices的产品:

产品

ArticleId | Price | VatPercentage | VatPrice
(integer) (numeric)   (varchar)    (numeric)
--------------------------------------------
    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
    0

现在我需要使用Group_concat构建字符串,并使用vatpercentage来定价,其中VatPrice不为0且价格不为0.

在这种情况下我想要的结果:

{a}25{b}45 SEK{c}{a}8{b}9.6 SEK{c}

我试过的代码:

select 
group_concat('{a}' || 
CAST(VatPercentage as integer) ||
'{b}' || SUM(VatPrice) || 
' SEK' || '{c}','') 
FROM Product 
group by VatPercentage
having Count(Price) > 0

Fiddle

感谢正手

1 个答案:

答案 0 :(得分:1)

在子查询中执行常规连接,然后在外部查询中使用GROUP_CONCAT,因为您不能在参数中使用一个聚合函数。

SELECT GROUP_CONCAT(Result, '|') Results
FROM (
    SELECT 'VatPercentage:' || CAST(VatPercentage AS INTEGER) || '% VatPrice: '
        || SUM(VatPrice) Result
    FROM Product
    WHERE VatPercentage != '0'
    GROUP BY VatPercentage) x

您也不需要HAVING条款。这只会排除所有Price值为NULL的结果。但是您的示例结果是跳过VatPercentage为零的行,因此我将其放在WHERE子句中。

DEMO