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
:后者会删除重复的行。
我想将一行拆分为 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
:后者会删除重复的行。