2016-08-19 4 views
0

は、私は次のスキーマを持っていると言う:組合の後に新しい列を追加し、すべての

CREATE TABLE table1(colA TEXT, colB TEXT, colC TEXT); 

INSERT INTO table1(colA, colB, colC) VALUES ("A1", "B1", "C1"); 
INSERT INTO table1(colA, colB, colC) VALUES ("A2", "B2", "C2"); 

CREATE TABLE table2(colD TEXT, colE TEXT, colF TEXT); 

INSERT INTO table2(colD, colE, colF) VALUES ("D1", "E1", "F1"); 
INSERT INTO table2(colD, colE, colF) VALUES ("D2", "E2", "F2"); 

そして、私はそれから選ばれた少数の列のために一緒にテーブルを追加するには、次のクエリを実行します。

SELECT colA, colB FROM table1 
UNION ALL 
SELECT colD, colE FROM table2; 

どうだろうしあなたはunionの結果に別の列を追加します(たとえばcolG)? この行のcolA内の値に応じて、この新しい列の各行にメッセージ を入力したいとします。したがって、セル の内容がAで始まる場合は、「this is A」、または がDの場合は、「this is a D」と表示されます。どのようにそれを達成するためのアイデア?とても有難い。

答えて

1

あなたはこのようsomethigを行うことができます。

Select 'This is an ' + ColA , * from (
SELECT colA, colB FROM table1 
UNION ALL 
SELECT colD, colE FROM table2) t 
1

様々なアプローチがあります。以下では、組合中に手紙を取り出す方法を示します。あなたは組合の後の手紙を簡単に取り出すことができます。

MySQLはWITH SQL構文をサポートしていません。そのため、私はそれを含めました。ほとんどのデータベースはそれをサポートしていませんが、MySQLもその1つです。

PostgreSQL Fiddle

WITH union_tbl AS(
    SELECT colA, colB, left(colA,1) as letter FROM table1 
    UNION ALL 
    SELECT colD, colE, left(colD,1) as letter FROM table2 
) 

SELECT colA as "colA", -- double quotes are necessary in Pg to force case 
     colB as "colB", 
     'This is a' || CASE letter WHEN 'A' THEN 'n ' ELSE ' ' END || letter as "colG" 
FROM union_tbl; 

MySQL Fiddle

SELECT colA, 
     colB, 
     concat('This is a', case letter when 'A' then 'n ' else ' ' end, letter) as colG 
FROM (
    SELECT colA, colB, left(colA,1) as letter FROM table1 
    UNION ALL 
    SELECT colD, colE, left(colD,1) as letter FROM table2 
) union_tbl; 

出力:

colA colB colG 
A1 B1 This is an A 
A2 B2 This is an A 
D1 E1 This is a D 
D2 E2 This is a D 
0

SQLでdesirede結果については、以下のクエリを使用してください。

SELECT CASE WHEN LEFT(CAST(ColA as VARCHAR(50)),1)='A' THEN 'This is an A' 
      WHEN LEFT(CAST(ColA as VARCHAR(50)),1)='D' THEN 'This is a D' 
       ELSE 'Word in ColA is not starting with A or D' --Add if required 
      END ColG , * 
FROM (
     SELECT colA, colB FROM table1 
     UNION ALL 
     SELECT colD, colE FROM table2) t 
関連する問題