2017-05-11 6 views
2

データベースに2つのテーブル、つまりTable_1Table_2があります。MySqlは、既存のテーブルのカラムと別のテーブルの別のルックアップを使用して新しいテーブルを作成します。

Combined_tableという新しいテーブルに、Table_1Table_2の情報を組み合わせる必要があります。

Table_1カラムの名前と値は、Combined_tableに直接コピーできます。

名前がService Descriptionの別の値からなる列を追加する必要があります。これはTable_2です。それぞれ異なる値は、Combined_tableに追加された列名になります。

これらの新しい追加列は、それぞれの値を正しい行に追加する必要があります。各行は、すべての表で利用可能なMSISDN列を介して識別できます。 Combined_tableがどのように見えるべきかの

Table_1

|MSISDN  |Abar Date |Upgrd |Pack Code |Tariff    |Avg Spend |SIM Number 
|--------------|-----------|------|----------|---------------------|----------|---------------------| 
|9602005689344 |18-Mar-15 |Y  |MDA  |Machine2Machine Data |32.56  |89490000000000001215 | 
|9602005926494 |06-Feb-15 |Y  |MLT  |Machine2Machine Lite |27.38  |89490000000000004457 | 
|9602005926509 |06-Feb-15 |Y  |MLT  |Machine2Machine Lite |10.1  |89490000000000045677 | 
|9602005926524 |06-Feb-15 |Y  |MLT  |Machine2Machine Lite |31.77  |89490000000000002887 | 
|9602005926539 |18-Mar-15 |Y  |MDA  |Machine2Machine Data |32.36  |94900000000000100212 | 
|9602006330948 |11-Mar-16 |N  |MLT  |Machine2Machine Lite |4.39  |89460000000015600111 | 
|9602006330950 |11-Mar-16 |N  |MLT  |Machine2Machine Lite |4.39  |89940000000000426577 | 
|--------------|-----------|------|----------|---------------------|----------|---------------------| 

Table_2

|MSISDN   |Service Description    |Value  | 
|---------------|----------------------------------|----------| 
|9602005689344 |100MB        |25.44  | 
|9602005689344 |Basic Data 9600     |0.00  | 
|9602005689344 |Basic Telephony     |6.58  | 
|9602005689344 |Ebilling - Corporate CD Extract |0.00  | 
|9602005689344 |Unrestricted APN     |0.00  | 
|9602005926494 |100MB        |25.44  | 
|9602005926494 |Basic Data 9600     |0.00  | 
|9602005926494 |Basic Telephony     |4.39  | 
|9602005926494 |Ebilling - Corporate CD Extract |0.00  | 
|9602005926494 |Unrestricted APN     |0.00  | 
|9602005926509 |Basic Data 9600     |0.00  | 
|9602005926509 |Basic Telephony     |4.39  | 
|9602005926509 |Ebilling - Corporate CD Extract |0.00  | 
|9602005926509 |My Meg 0       |0.00  | 
|9602005926509 |Unrestricted APN     |0.00  | 
|9602005926524 |100MB        |25.44  | 
|9602005926524 |Basic Data 9600     |0.00  | 
|9602005926524 |Basic Telephony     |4.39  | 
|9602005926524 |Ebilling - Corporate CD Extract |0.00  | 
|9602005926524 |Unrestricted APN     |0.00  | 
|9602005926539 |100MB        |25.44  | 
|9602005926539 |Basic Data 9600     |0.00  | 
|9602005926539 |Basic Telephony     |6.58  | 
|9602005926539 |Ebilling - Corporate CD Extract |0.00  | 
|9602005926539 |Unrestricted APN     |0.00  | 
|9602006330948 |Basic Data 9600     |0.00  | 
|9602006330948 |Basic Telephony     |4.39  | 
|9602006330948 |Caller Identity FREE    |0.00  | 
|9602006330948 |Ebilling - Corporate CD Extract |0.00  | 
|9602006330948 |My Meg 0       |0.00  | 
|9602006330948 |Promotional My Gig 1 - 24 Months |0.00  | 
|9602006330948 |SMS Mobile Originating   |0.00  | 
|9602006330948 |Unrestricted APN     |0.00  | 
|9602006330950 |Basic Data 9600     |0.00  | 
|9602006330950 |Basic Telephony     |4.39  | 
|9602006330950 |Caller Identity FREE    |0.00  | 
|9602006330950 |Ebilling - Corporate CD Extract |0.00  | 
|9602006330950 |My Meg 0       |0.00  | 
|9602006330950 |Promotional My Gig 1 - 24 Months |0.00  | 
|9602006330950 |SMS Mobile Originating   |0.00  | 
|9602006330950 |Unrestricted APN     |0.00  | 
|---------------|----------------------------------|----------| 

例。

|MSISDN   |Abar Date |Upgrd |Pack |Code Tariff   |Avg Spend |SIM Number    |100MB |Basic Data 9600 |Basic Telephony |Caller Identity FREE |Ebilling - Corporate CD Extract |My Meg 0 |Promotional My Gig 1 - 24 Months |SMS Mobile Originating |Unrestricted APN | 
|9602005689344 |18-Mar-15 |Y  |MDA |Machine2Machine Data |32.56  |89490000000000001215 |25.44 |0.00    |6.58    |0.00     |0.00        |0.00  |0.00        |0.00     |0.00    | 
|9602005926494 |06-Feb-15 |Y  |MLT |Machine2Machine Lite |27.38  |89490000000000004457 |25.44 |0.00    |4.39    |0.00     |0.00        |0.00  |0.00        |0.00     |0.00    | 
|9602005926509 |06-Feb-15 |Y  |MLT |Machine2Machine Lite |10.10  |89490000000000045677 |0.00 |0.00    |4.39    |0.00     |0.00        |0.00  |0.00        |0.00     |0.00    | 
|9602005926524 |06-Feb-15 |Y  |MLT |Machine2Machine Lite |31.77  |89490000000000002887 |25.44 |0.00    |4.39    |0.00     |0.00        |0.00  |0.00        |0.00     |0.00    | 
|9602005926539 |18-Mar-15 |Y  |MDA |Machine2Machine Data |32.36  |89490000000000100212 |25.44 |0.00    |6.58    |0.00     |0.00        |0.00  |0.00        |0.00     |0.00    | 
|9602006330948 |11-Mar-16 |N  |MLT |Machine2Machine Lite |4.39  |89460000000015600111 |0.00 |0.00    |4.39    |0.00     |0.00        |0.00  |0.00        |0.00     |0.00    | 
|9602006330950 |11-Mar-16 |N  |MLT |Machine2Machine Lite |4.39  |89940000000000426577 |0.00 |0.00    |4.39    |0.00     |0.00        |0.00  |0.00        |0.00     |0.00    | 

PHPを使用してテーブルを作成する方法はわかりません。 私はデータを作成して追加するための単一のMySQLリクエストを実行することを考えましたが、開始方法はわかりません。

アドバイスは非常に役に立ちます。あなたは列名(つまり、明確な説明を)知っている場合は、すでに、あなたは、テーブルを作成し、このようなSELECTクエリを書くことができます

+0

これはMySQLの質問ですが、なぜそれをMicrosoftの「SQL Server」でもタグ付けしましたか?どちらか一方にタグを付ける。両方にタグを付けないでください。 – pmbAustin

+1

このようなデータを2番目のテーブルにコピーするのは、一般的には悪い考えです。おそらく、データを望みどおりに組み合わせたビューを作成する方がはるかに良い方法です。そうすれば、データのコピーだけがあり、すべてのテーブルを同期させておくことを心配する必要はありません。 –

答えて

1

SELECT MSISDN, Abar Date, Upgrd, Pack Code, Tariff, Avg Spend, SIM Number, 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = '100MB') AS 100MB, 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Data 9600') AS 'Basic Data 9600', 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Telephony') AS 'Basic Telephony', 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Ebilling - Corporate CD Extract') AS 'Ebilling - Corporate CD Extract', 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Unrestricted APN') AS 'Unrestricted APN' 
FROM Table_1 t1; 

あなたはこれらの列を持つテーブルを作成し、INSERT INTOを使用することができます。 SELECT構文

INSERT INTO table_3 
SELECT MSISDN, Abar Date, Upgrd, Pack Code, Tariff, Avg Spend, SIM Number, 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = '100MB') AS 100MB, 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Data 9600') AS 'Basic Data 9600', 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Basic Telephony') AS 'Basic Telephony', 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Ebilling - Corporate CD Extract') AS 'Ebilling - Corporate CD Extract', 
(SELECT COALESCE(SUM(VALUE), 0) FROM Table_2 WHERE MSISDN = t1.MSISDN AND description = 'Unrestricted APN') AS 'Unrestricted APN' 
FROM Table_1 t1; 
+0

ダルシャンを気に入ってください。親切にも、以下のコメントを見てください。 –

+0

@LouisMeyerクエリに 'COALESCE'を追加しました。今すぐどうぞ? –

0

は、私は、ライブデータベーステーブルからあなたsugestionsといくつかの実際のデータを使用して、以下をコンパイルするために管理

ダルシャン

ありがとうございます。

が正常に動作し、一時テーブルを作成します。

CREATE table `infolog_SIMS` (`MSISDN` VARCHAR(50), `Abar Date` VARCHAR(50), `Term Date` VARCHAR(50), `Upgrd` VARCHAR(50), `Upgrd date` VARCHAR(50), `Pack Code` VARCHAR(50), `Tariff` VARCHAR(50), `Pack Desc` VARCHAR(50), `Avg Spend` VARCHAR(50), `Stat` VARCHAR(50), `SIM Number` VARCHAR(50)); 

その後一時テーブルを余分な列を追加し、また、正常に動作します::

ALTER TABLE `infolog_SIMS` ADD COLUMN `100MB` VARCHAR(50) NOT NULL, ADD COLUMN `Basic Data 9600` VARCHAR(50) NOT NULL, ADD COLUMN `Basic Telephony` VARCHAR(50) NOT NULL, ADD COLUMN `Ebilling Corporate CD Extract` VARCHAR(50) NOT NULL, ADD COLUMN `LTE` VARCHAR(50) NOT NULL, ADD COLUMN `MMS Standard` VARCHAR(50) NOT NULL, ADD COLUMN `Unrestricted APN` VARCHAR(50) NOT NULL, ADD COLUMN `My Meg 0` VARCHAR(50) NOT NULL, ADD COLUMN `SMS Mobile Originating` VARCHAR(50) NOT NULL, ADD COLUMN `Caller Identity FREE` VARCHAR(50) NOT NULL, ADD COLUMN `Promotional My Gig 1 24 Months` VARCHAR(50) NOT NULL, ADD COLUMN `MyMeg 30 Mobile Internet Bundle` VARCHAR(50) NOT NULL, ADD COLUMN `15MB` VARCHAR(50) NOT NULL, ADD COLUMN `SPNwww.infolog.co.za` VARCHAR(50) NOT NULL, ADD COLUMN `Make Nat. Int. Roam Calls` VARCHAR(50) NOT NULL, ADD COLUMN `Outgoing Bar` VARCHAR(50) NOT NULL; 

値を持つそれぞれの行のために追加します:

SELECT *, (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = '100MB') AS '100MB', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Basic Data 9600') AS 'Basic Data 9600', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Basic Telephony') AS 'Basic Telephony', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Ebilling Corporate CD Extract') AS 'Ebilling Corporate CD Extract', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'LTE') AS 'LTE', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'MMS Standard') AS 'MMS Standard', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Unrestricted APN') AS 'Unrestricted APN', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'My Meg 0') AS 'My Meg 0', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'SMS Mobile Originating') AS 'SMS Mobile Originating', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Caller Identity FREE') AS 'Caller Identity FREE', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Promotional My Gig 1 24 Months') AS 'Promotional My Gig 1 24 Months', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'MyMeg 30 Mobile Internet Bundle') AS 'MyMeg 30 Mobile Internet Bundle', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = '15MB') AS '15MB', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'SPNwww.infolog.co.za') AS 'SPNwww.infolog.co.za', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Make Nat. Int. Roam Calls') AS 'Make Nat. Int. Roam Calls', (SELECT `Value` FROM `Infolog_temp_VAS` WHERE `Dialling No` = `t1`.`MSISDN` AND `Service Description` = 'Outgoing Bar') AS 'Outgoing Bar' FROM `Infolog_temp_SDR` `t1`; 

の場合Valueフィールドの一部がNULLを返します。エラーテーブルはInfolog_temp_VASテーブルに存在しません。 NULLNOに変更するためにserviceが存在しない場合は、IF条件を追加することは可能ですか?

これは実際の挿入コマンドではなく、選択部分のみです。

関連する問題