Как я могу увидеть, откуда были получены результаты моего заявления о СЛИЯНИИ?

#sql #ssms #coalesce

Вопрос:

У меня есть пять полей, на которые мне нужно посмотреть: FirstName , Surname , DateOfBirth , id и Postcode .

Если я запущу это (с помощью SQL Server Management Studio (SSMS)):

 SELECT COALESCE(FirstName, Surname, DateOfBirth, id, Postcode) FROM table1  

Он возвращает такие результаты:

 1. DAVID 2. SUSAN 3. 764329 4. FRANK 5. STEPHANIE 6. HARRIS 7. 10/10/1967 8. E3 5QP 9. DAVID 10. JOHN  

Проблема в том, что не всегда легко определить, откуда берутся результаты. Например, DAVID и JOHN это легко могут быть имена или фамилии.

Есть ли способ увидеть происхождение каждого результата? Что-то вроде этого:

 1. DAVID FirstName 2. SUSAN FirstName 3. 764329 id 4. FRANK FirstName 5. STEPHANIE FirstName 6. HARRIS Surname 7. 10/10/1967 DateOfBirth 8. E3 5QP Postcode 9. DAVID Surname 10. JOHN Surname  

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

Комментарии:

1. Единственный способ получить это-создать новый столбец на CASE WHEN xxx is not NULL then 'source' основе Coalesce иерархии.

2. Не совсем так.. вы можете использовать CONCAT @manibharataraju

3. Ты прав. Моим мотивом было сказать, что вы должны сделать это вручную.

Ответ №1:

Вы не указали СУБД, но если вы действительно хотите использовать coalesce , вы можете попробовать что-то вроде этого:

 SELECT COALESCE(CONCAT(FirstName,' First Name'), CONCAT(Surname,' Surname'),...) FROM table1  

Используйте CONCAT или определенный способ вашей СУБД для объединения. CONCAT должно возвращать значение null, если один из элементов в null, поэтому он должен работать одинаково.

Вы также можете создать новую колонку, используя CASE EXPRESSION , как предложил @manibharataraju в комментариях.

Комментарии:

1. Это возвращает DAVIDDAVID SUSANSUSAN , 764329764329 и так далее.

2. @Mus Тогда вы не использовали круглые скобки вокруг второго элемента CONCAT . Посмотрите на код CONCAT(FirstName," First Name") . Вторые аргументы-это строка, а не имя столбца.

3. Я скопировал его точно в соответствии с вашим примером: COALESCE(CONCAT(FirstName, "FirstName")...) и так далее. Если я добавлю пробел после первой кавычки, как в вашем примере, он вернет ошибку о недопустимом имени столбца.

4. Вы используете sql server? Вот почему важно указать вашу СУБД! Попробуйте заменить " в ' —gt; CONCAT(FirstName,' First Name')

5. Да, это так, и все — спасибо. Я тоже обновлю вопрос.