У меня есть таблица, которая выглядит так:
CREATE TABLE [Test].[dbo].[MyTest]
(
[Id] INT NOT NULL,
[ColA] VARCHAR(255) NULL,
[ColB] VARCHAR(255) NULL,
[ColC] VARCHAR(255) NULL,
[ColD] VARCHAR(255) NULL
);
И скажем, у меня есть:
Id ColA ColB ColC ColD
---------------------------------------
1 A B NULL C
2 A A NULL D
3 NULL A B NULL
4 B B B B
5 NULL NULL NULL NULL
То, что я пытаюсь сделать, - это выбрать каждую строку из этой таблицы, но хочу только первые 2 отличных ненулевых значения из ColA-ColD по порядку. Другими словами, если для одной строки ColA и ColB не равны NULL и отличаются друг от друга, это те 2, которые я хочу для этой строки. Используя данные, которые я дал выше, желаемые результаты этого запроса будут:
1, A (from ColA), B (from ColB)
2, A (from ColA), D (from ColD)
3, A (from ColB), B (from ColC)
4, B (from ColA)
Обратите внимание, что если все данные для ColA-D для строки равны NULL, эта строка не выбирается. Также это нормально, если есть только 1 отличный от нуля столбец (вы можете видеть из строки результатов с Id 4) - это не должно быть 2, но в идеале это будет 2.
В принципе, я бы идеально мог получить TOP (2) DISTINCT от ColA-ColD, ГДЕ ни один из них не является NULL, но я понимаю, что TOP и DISTINCT работают со строками, а не со столбцами, как я пытаюсь это сделать. Любая помощь с благодарностью.
Спасибо!