Вы можете использовать Unpivot, чтобы получить ожидаемые результаты.
create table fruits (fruiteater varchar(100), Fruit1 varchar(100), Fruit2 varchar(100),
Fruit3 varchar(100), Fruit4 varchar(100), Fruit5 varchar(100), Fruit6 varchar(100))
insert into fruits values ('Aaron', 'Orange', 'Pear', 'Apple', NULL, NULL, NULL)
,('Bob', 'Apple', 'Orange', 'Blueberries', 'Peach', 'Mango', 'Banana')
,('Carter', 'Pear', 'Orange', 'Apple', NULL, NULL, NULL)
,('David', 'Blueberries', NULL, NULL, NULL, NULL, NULL)
,('Earnest', 'Mango', 'Orange', 'Pear', 'Apple','Blueberries', NULL)
,('Frank', 'Raspberries', NULL, NULL, NULL, NULL, NULL)
Поскольку все эти фрукты будут в одном столбце, очень важно позаботиться о типе данных и длине при выполнении разворота, поэтому я убедился, что все столбцы имеют один и тот же тип данных.
select fruiteater, Value as Fruit from fruits
unpivot
(value for columnname in ([Fruit1], [Fruit2], [Fruit3], [Fruit4], [Fruit5],[Fruit6]))unpvt
Вывод: Unpivot позаботится о нулевых значениях, поскольку устраняет это.
fruiteater Fruit
Aaron Orange
Aaron Pear
Aaron Apple
Bob Apple
Bob Orange
Bob Blueberries
Bob Peach
Bob Mango
Bob Banana
Carter Pear
Carter Orange
Carter Apple
David Blueberries
Earnest Mango
Earnest Orange
Earnest Pear
Earnest Apple
Earnest Blueberries
Frank Raspberries