2017-03-06 16 views
1

2行または3行に行を分割したいと考えています。これは可能ですか?
私はこのような引用符を示す表があります。SQL:1行を2行または3行に分割する

表NAME:引用

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 

任意の助けいただければ幸いです。

+0

「UNION」は重複を削除します。したがって、Bobがバスライドで30を、trainrideでSteve 30を使用すると、「30」のエントリが1つだけになります。重複しないようにするには、 'UNION ALL'を使います。 'PIVOT'を見たいかもしれません – HoneyBadger

+0

あなたの希望する結果が入力データと一致していないようです。特別な数学がありますか、それとも単にタイプミスですか? –

答えて

1
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の代わりにunion allを使用してください。後で重複する行が削除されます。

+0

ありがとう!治療に取り組んだ! – JohnDow