Sql-Server-2014

通過為該客戶創建新行/記錄來隔離每個客戶的電子郵件 ID(如果有多個)

  • November 20, 2017

我的客戶數據庫在“電子郵件”欄位中包含多個電子郵件 ID,因此我的電子郵件被退回。我想在“電子郵件”欄位中只有一個電子郵件 ID,但同時,我也不想失去任何其他電子郵件 ID。

我希望如果“電子郵件”欄位中有多個電子郵件 ID,則為該客戶創建新行(相當於電子郵件 ID 的總數),僅在“電子郵件”欄位中使用一個電子郵件 ID,其餘部分為數據應該為該特定客戶複製這些欄位。

以下是腳本。

CREATE TABLE mytable (
   NAME VARCHAR(26) NOT NULL PRIMARY KEY
   ,City VARCHAR(10) NOT NULL
   ,EMail VARCHAR(79) NOT NULL
   ,Contact VARCHAR(33) NOT NULL
   );

INSERT INTO mytable 
(NAME, City, EMail, Contact)
VALUES 
('EFG', 'Chennai', 'eminent5sales@gmail.com;eminentyusuf@gmail.com', 'Mr. Y'),
('ABC', 'AHMEDABAD', 'priyalcorporation@gmail.com', 'Mr. N'),
('XYZ', 'Ahemadabad', 'Dhruv_Patel@milacron.co;mayur_a_patel@milacron.com;Bharat_R_Parekh@milacron.com', 'Mr. J');

預期產出

+------+------------+------------------------------------------------+---------+
| Name |    City    |                     E-Mail                     | Contact |
+------+------------+------------------------------------------------+---------+
| EFG  | Chennai    | eminent5sales@gmail.com;eminentyusuf@gmail.com | Mr. Y   |
| EFG  | Chennai    | eminentyusuf@gmail.com                         | Mr. Y   |
| ABC  | AHMEDABAD  | priyalcorporation@gmail.com                    | Mr. N   |
| XYZ  | Ahemadabad | Dhruv_Patel@milacron.co                        | Mr. J   |
| XYZ  | Ahemadabad | mayur_a_patel@milacron.com                     | Mr. J   |
| XYZ  | Ahemadabad | Bharat_R_Parekh@milacron.com                   | Mr. J   |
CREATE TABLE mytable (
    NAME VARCHAR(26) NOT NULL PRIMARY KEY
    ,City VARCHAR(10) NOT NULL
    ,EMail VARCHAR(79) NOT NULL
    ,Contact VARCHAR(33) NOT NULL
    );

GO
INSERT INTO mytable 
(NAME, City, EMail, Contact)
VALUES 
('EFG', 'Chennai', 'eminent5sales@gmail.com;eminentyusuf@gmail.com', 'Mr. Y'),
('ABC', 'AHMEDABAD', 'priyalcorporation@gmail.com', 'Mr. N'),
('XYZ', 'Ahemadabad', 'Dhruv_Patel@milacron.co;mayur_a_patel@milacron.com;Bharat_R_Parekh@milacron.com', 'Mr. J');
GO
select * from mytable;
GO
姓名 | 城市 | 電子郵件 | 接觸
:--- | :--------- | :------------------------------------------------------------------------------ | :------
美國廣播公司 | 艾哈邁達巴德 | priyalcorporation@gmail.com | N先生 
EFG | 欽奈 | eminent5sales@gmail.com;eminentyusuf@gmail.com | Y先生 
XYZ | 艾哈邁達巴德 | Dhruv_Patel@milacron.co;mayur_a_patel@milacron.com;Bharat_R_Parekh@milacron.com | 先生。Ĵ 
 SELECT A.[NAME],A.[City],
     Split.a.value('.', 'VARCHAR(100)') AS [Email],[Contact] 
 FROM  (SELECT [NAME],[City],  
         CAST ('<M>' + REPLACE([Email], ';', '</M><M>') + '</M>' AS XML) AS [Email],[Contact] 
     FROM  mytable) AS A CROSS APPLY Email.nodes ('/M') AS Split(a); 
GO
姓名 | 城市 | 電子郵件 | 接觸
:--- | :--------- | :--------------------------- | :------
美國廣播公司 | 艾哈邁達巴德 | priyalcorporation@gmail.com | N先生 
EFG | 欽奈 | eminent5sales@gmail.com | Y 先生 
EFG | 欽奈 | eminentyusuf@gmail.com | Y 先生 
XYZ | 艾哈邁達巴德 | Dhruv_Patel@milacron.co | 先生。Ĵ 
XYZ | 艾哈邁達巴德 | mayur_a_patel@milacron.com | 先生。Ĵ 
XYZ | 艾哈邁達巴德 | Bharat_R_Parekh@milacron.com | 先生。Ĵ 

dbfiddle在這裡

我添加了一封空白郵件只是為了照顧它。

順便說一句,名稱是主鍵,你會得到重複的鍵。

INSERT INTO mytable (NAME, City, EMail, Contact)
VALUES ('DFG', 'rOGGS', '', 'Mr. J');

SELECT * FROM mytable;
GO
姓名 | 城市 | 電子郵件 | 接觸
:--- | :--------- | :------------------------------------------------------------------------------ | :------
美國廣播公司 | 艾哈邁達巴德 | priyalcorporation@gmail.com | N先生 
東風| 羅格斯 | | J先生 
EFG | 欽奈 | eminent5sales@gmail.com;eminentyusuf@gmail.com | Y先生 
XYZ | 艾哈邁達巴德 | Dhruv_Patel@milacron.co;mayur_a_patel@milacron.com;Bharat_R_Parekh@milacron.com | 先生。Ĵ 
CREATE FUNCTION dbo.MySplit (@data VARCHAR(MAX))
RETURNS
     @mails TABLE ([mail] [nvarchar] (500))
AS
BEGIN
    WHILE CHARINDEX(';', @data) > 0
    BEGIN
        INSERT INTO @mails 
        SELECT SUBSTRING(@data, 1, CHARINDEX(';', @data) - 1);

        SET @data = SUBSTRING(@data, CHARINDEX(';', @data) + 1, LEN(@data) - CHARINDEX(';', @data));
     END

     INSERT INTO @mails
     SELECT @data;

     RETURN;
END
GO
SELECT      mytable.Name,
            mytable.City,
            ms.mail,
            mytable.Contact
FROM        mytable
OUTER APPLY MySplit(Email) ms;
GO
姓名 | 城市 | 郵件 | 接觸
:--- | :--------- | :--------------------------- | :------
美國廣播公司 | 艾哈邁達巴德 | priyalcorporation@gmail.com | N先生 
東風| 羅格斯 | | J先生 
EFG | 欽奈 | eminent5sales@gmail.com | Y 先生 
EFG | 欽奈 | eminentyusuf@gmail.com | Y 先生 
XYZ | 艾哈邁達巴德 | Dhruv_Patel@milacron.co | 先生。Ĵ 
XYZ | 艾哈邁達巴德 | mayur_a_patel@milacron.com | 先生。Ĵ 
XYZ | 艾哈邁達巴德 | Bharat_R_Parekh@milacron.com | 先生。Ĵ 

dbfiddle在這裡

引用自:https://dba.stackexchange.com/questions/191283