SQL:将单行拆分为2行或3行

SQL: Split a single row into 2 or 3 rows

我想将一行拆分为 2 或 3 行。这可能吗?
我有一个 table 显示这样的引号:

TABLE 姓名:引用

ID | NAME  | BusCost | TaxiCost | TrainCost 
-------------------------------------------
01 | Steve | NULL    | 25       | NULL
02 | Barry | 15      | 30       | NULL
03 | Bob   | 150     | 400      | 300

但我想像这样显示引号:

ID | Name   | Cost
------------------
01 | Steve  | 25
02 | Barry  | 15
02 | Barry  | 30
03 | Bob    | 30
03 | Bob    | 100
03 | Bob    | 70

我猜我需要使用某种 UNION 来做到这一点,但我不知所措。我是 SQL 的新手,希望有人能给我指出正确的方向。

我最接近的(也不是很接近)是这样做的:

SELECT COST
FROM 
(
SELECT BusCost AS COST FROM Quotes
UNION
SELECT TaxiCost AS COST FROM Quotes
UNION
SELECT TrainCost AS COST FROM Quotes
) A
GROUP BY COST

SELECT id, name FROM Quotes
UNION ALL
SELECT COST
FROM
(
SELECT BusCost AS COST FROM Quotes
UNION
SELECT TaxiCost AS COST FROM Quotes
UNION
SELECT TrainCost AS COST FROM Quotes
) A
GROUP BY COST

如有任何帮助,我们将不胜感激。

SELECT  *
FROM    (
        SELECT  id
        ,       Name
        ,       BusCost as Cost
        FROM    Quotes
        UNION ALL
        SELECT  id
        ,       Name
        ,       TaxiCost
        FROM    Quotes
        UNION ALL
        SELECT  id
        ,       Name
        ,       TrainCost
        FROM    Quotes
        ) AllCosts
WHERE   Cost IS NOT NULL

where 子句删除没有成本的行,例如当 TaxiCost 为空时。使用 union all 而不是 union:后者会删除重复的行。