SQL 基于字段类型和按类型分组的计算

SQL Calculations based by field type and group by the type

数据库包括 FamID、TicketType 和 Amt 我想计算每个家庭的每种机票类型的总金额,并根据所有机票类型的总数按家庭从高到低排序。

数据库值为:

FamID           TicketType             Amt
1                1                     10
1                1                     10
1                2                     20
1                3                     30
2                2                     20
2                1                     10
2                1                     10
2                1                     10
2                3                     30
3                3                     30
3                3                     30
3                3                     30

想要结果

Family         Type 1         Type 2        Type 3         Total
3                0               0             90            90
2                30              20            30            80
1                20              20            30            70

我是不是想做的太多了?

您从未指定 RDBMS,但以下数据透视查询只需稍加修改即可适用于大多数主要数据库:

SELECT t.`Type 1`, t.`Type 2`, t.`Type 3`,
    (t.`Type 1` + t.`Type 2` + 2*t.`Type 3`) AS Total
FROM
(
    SELECT FamID AS Family,
        SUM(CASE WHEN TicketType = 1 THEN Amt ELSE 0 END) AS `Type 1`,
        SUM(CASE WHEN TicketType = 2 THEN Amt ELSE 0 END) AS `Type 2`,
        SUM(CASE WHEN TicketType = 3 THEN Amt ELSE 0 END) AS `Type 3`,
    FROM Tickets
    GROUP BY FamID
) t
ORDER BY t.Total DESC