Нужен контрольный пример, чтобы найти пропущенные значения для имени - PullRequest
0 голосов
/ 21 октября 2019

В следующей таблице приведены примеры данных.

declare @test table(
   Name      varchar(30) not null,
   Product_1 varchar(10) not null,
   Product_2 varchar(10) not null,
   Product_3 varchar(10) not null,
   Product_4 varchar(10) not null
)

insert into @test values('A', 'AB',  'BC',  '',    'FG')
insert into @test values('B', 'EF1', 'EF2', 'EF3', '')
insert into @test values('C', 'ZA1', 'ZA2', 'ZA3', 'ZA4')
insert into @test values('D', '',    'ER',  'TZ1', 'GB1')

select * from @test

. Имеются следующие данные:

enter image description here

Мне нужен тестовый примерв Sql, чтобы найти отсутствующий продукт для названий, и каждое имя имеет продукт должен иметь продукт перед новым продуктом. Например, у A отсутствует продукт на 3, а на 4, Failed B не хватает продуктов до 3, но отсутствует на 4, Pass C имеет продукт, В проходе D отсутствует продукт на 1, сбой

Не могли бы вы помочь мне отобразить вывод, как показано ниже:

enter image description here

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Попробуйте это:

select name, 
       min(case when val = '' and next_val <> '' 
            then 'FAILED' 
            else 'PASS' 
       end) 
from   ( select *, lead(val) over ( partition by name order by col ) next_val from @test
         unpivot
         ( val for col in (Product_1, Product_2, Product_3, Product_4) ) as unpvt 
       ) A
group  by name;
1 голос
/ 21 октября 2019

Ваш запрос должен быть таким, как показано ниже, но вам необходимо тщательно настроить условия для сбоя и успеха: SQL Fiddle

Настройка схемы MS SQL Server 2017 :

create table test (
   Name varchar(30) not null,
   Product_1 varchar(10) not null,
   Product_2 varchar(10) not null,
   Product_3 varchar(10) not null,
   Product_4 varchar(10) not null
)

insert into test values('A', 'AB', 'BC', '', 'FG')
insert into test values('B', 'EF1', 'EF2','EF3','')
insert into test values('C', 'ZA1', 'ZA2', 'ZA3','ZA4')
insert into test values('D', '', 'ER','TZ1','GB1')

Запрос 1 :

SELECT Name,
CASE
    WHEN Product_1 = '' THEN 'FAILED'
    WHEN Product_2 = '' THEN 'FAILED'
    WHEN Product_3 = '' THEN 'FAILED'
    WHEN Product_4 = '' THEN 'PASS'
    ELSE 'PASS'
END AS Testing
FROM test

Результаты :

| Name | Testing |
|------|---------|
|    A |  FAILED |
|    B |    PASS |
|    C |    PASS |
|    D |  FAILED |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...