Пожалуйста, не уменьшайте это, так как мне сложно объяснить. Я работаю над миграцией данных, поэтому некоторые из структур выглядят странно, потому что они были созданы кем-то подобным.ВЫБОР ЗАЯВОК В СЛУЧАЕ
Например, у меня есть стол Person с PersonID и PersonName в виде столбцов. У меня есть дубликаты в таблице.
У меня есть таблица сведений, в которой у меня есть имя пользователя, хранящееся в столбце. Это имя PersonName может существовать или не существовать в таблице Person. Мне нужно получить PersonID из сопоставимых записей, иначе в PersonID укажу некоторое значение hardcode.
Я не могу написать ниже запрос, потому что PersonName дублируется в таблице Person, это объединение удваивает строки, если из-за присоединения имеется соответствующая запись.
SELECT d.Fields, PersonID
FROM Details d
JOIN Person p ON d.PersonName = p.PersonName
Нижеприведенные работы запроса, но я не знаю, как заменить «NULL» с некоторым значением Я хочу вместо
SELECT d.Fields, (SELECT TOP 1 PersonID FROM Person where PersonName = d.PersonName)
FROM Details d
Так NULL, есть некоторые PersonNames в таблице деталей, в таблице Person отсутствуют. Как написать CASE КОГДА в этом случае?
Я попытался ниже, но это не сработало
SELECT d.Fields,
CASE WHEN (SELECT TOP 1 PersonID
FROM Person
WHERE PersonName = d.PersonName) = null
THEN 123
ELSE (SELECT TOP 1 PersonID
FROM Person
WHERE PersonName = d.PersonName) END Name
FROM Details d
Этот запрос еще показывает тот же результат, как 2-го запроса. Пожалуйста, посоветуйте мне об этом. Дай мне знать, если я где-то неясен. Спасибо
'= null' никогда не будет оцениваться как истинный, вам нужно сказать' IS NULL'. Также шаблон, который вы используете, неэффективен и неинтуитивен. Вы должны попробовать внешнее соединение вместо всех этих подробных подзапросов. –
Плохая привычка писать такие подзапросы: '(SELECT TOP 1 PersonID FROM Person, где PersonName = d.PersonName)' - попытайтесь привыкнуть к использованию псевдонимов внутри них - '(SELECT TOP 1 p.PersonID FROM Person p, где p.PersonName = d.PersonName) '- если вы неправильно указали имена столбцов, но тот же столбец существует во внешнем запросе, он будет использоваться без предупреждения, и это обычно неверно (например, если не было столбца' PersonName' в 'Person', ваше предложение' WHERE' эффективно превращается в 'where d.PersonName = d.PersonName') –
благодарит Damien за ценную точку. – techspider