Адам много обошел вокруг самой проблемы, но я собираюсь упомянуть основную проблему, симптомом которой она является. Ваша модель данных почти наверняка плохая. Если вы планируете заняться (любой) разработкой SQL, вам следует прочитать несколько вводных книг по моделированию данных. Одним из первых правил нормализации является то, что сущности не должны содержать в себе повторяющихся групп. Например, у вас не должно быть столбцов с именами «phone_1», «phone_2» и т. Д.
Вот гораздо лучший способ смоделировать такую ситуацию:
CREATE TABLE Contacts (
contact_id INT NOT NULL,
contact_name VARCHAR(20) NOT NULL,
contact_description VARCHAR(500) NULL,
CONSTRAINT PK_Contacts PRIMARY KEY CLUSTERED (contact_id)
)
CREATE TABLE Contact_Phones (
contact_id INT NOT NULL,
phone_type VARCHAR(10) NOT NULL,
phone_number VARCHAR(20) NOT NULL,
CONSTRAINT PK_Contact_Phones PRIMARY KEY CLUSTERED (contact_id, phone_type),
CONSTRAINT CK_Contact_Phones_phone_type CHECK (phone_type IN ('HOME', 'FAX', 'MOBILE'))
)
Теперь вместо того, чтобы пытаться объединить строку для работы с разными столбцами, вы можете работать с ними как с множеством и получать нужные номера телефонов с помощью бизнес-логики. (Извините, что я не использовал ваш пример, но он показался мне слишком общим и сложным для понимания).