Разделение строк и фильтрация столбцов в новые столбцы - PullRequest
0 голосов
/ 25 сентября 2019

Привет, я новичок в использовании SQL-сервера и мне нужна помощь.Я должен извлечь значение «Lab» из ParLab в TableA.Мне нужна помощь с фильтрацией только по кодам из «Lab», которые начинаются с «L», и из «Mcode», которые равны «9LL» и «2AN».

 TableA 

 ParLab  Mcode  Entry
 L;58    9LL    948487
 L;58    2AN    e@y.com
 L;80    9LL    938745
 L;58    3B2    563467
 T;80    2AN    d@g.com
 T;88    9LL    827120
 T;88    9LL    k@g.com
 A;7;2   2AN    928233

Затем мне нужно присоединиться к «Lab» из таблицы B со значениями, отделенными от строки ParLab, которые соответствуют «Lab».

 TableB

 Lab        Customer
 58         Lynn
 80         Laurence
 88         Emmanuel

Я использовал этот код дляотделите строку:

  SELECT ParLab, MCode, Entry
        ,SUBSTRING(ParLab,CHARINDEX(';', ParLab)+1, LEN(ParLab)) AS Lab

  FROM TableA 

Результат должен содержать Tel и Email в разных столбцах, назначенных для «Lab», а Customer присоединяется к TableB в «Lab».

  Customer  Lab  Tel      Email
  Lynn      58   948487   e@y.com
  Laurence  80   938745   d@g.com
  Emmanuel  88   827120   k@g.com

1 Ответ

2 голосов
/ 25 сентября 2019

Попробуйте это ниже

DECLARE @TableA  AS TABLE ( ParLab  VARCHAR(100), Mcode VARCHAR(100),  Entry VARCHAR(100))
INSERT INTO @TableA
SELECT 'L;58' ,'9LL','948487'   UNION ALL
SELECT 'L;58' ,'2AN','e@y.com'  UNION ALL
SELECT 'L;80' ,'9LL','938745'   UNION ALL
SELECT 'L;58' ,'3B2','563467'   UNION ALL
SELECT 'T;80' ,'2AN','d@g.com'  UNION ALL
SELECT 'T;88' ,'9LL','827120'   UNION ALL
SELECT 'T;88' ,'9LL','k@g.com'  UNION ALL
SELECT 'A;7;2','2AN','928233'

DECLARE @TableB  AS TABLE ( Customer  VARCHAR(100), Lab INT)
INSERT INTO @TableB
SELECT 'Lynn'      ,58 UNION ALL
SELECT 'Laurence'  ,80 UNION ALL
SELECT 'Emmanuel'  ,88 


SELECT  b.Customer,
        b.Lab,
        MAX(CASE WHEN ISNUMERIC(Entry)=1 THEN Entry END)As Tel,
        MAX(CASE WHEN ISNUMERIC(Entry)<>1 THEN Entry END) AS Email 
FROM
(
SELECT  ParLab,
        Mcode,
        [Entry],
        CASE WHEN LEN(ParLab)-LEN(REPLACE(ParLab,';','')) = 1 
        THEN  SUBSTRING(ParLab,CHARINDEX(';', ParLab)+1,LEN(ParLab)) 
        ELSE NULL END AS Lab        
FROM @TableA 
) AS A
RIGHT JOIN @TableB B
ON a.Lab = b.Lab
GROUP BY b.Customer,b.Lab

Результат


Customer    Lab Tel     Email
*******************************
Lynn        58  948487  e@y.com
Laurence    80  938745  d@g.com
Emmanuel    88  827120  k@g.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...