Sql-Server-2014
通過為該客戶創建新行/記錄來隔離每個客戶的電子郵件 ID(如果有多個)
我的客戶數據庫在“電子郵件”欄位中包含多個電子郵件 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在這裡