Я озадачен выводом следующего запроса:
select
'Eq Type' =
case
when
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) =
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type]))
then
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1)
when
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) <>
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type]))
then
replace([Eq Type], '-', '')
else
null
end,
'Failure_Class' =
case
when charindex('-', [Eq Type]) <> 0 and
(substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) =
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type])))
then
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1)
when charindex('-', [Eq Type]) <> 0 and
(substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) <>
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type])))
then
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) +
'\' +
replace([Eq Type], '-', '')
when CHARINDEX('-', [Eq Type]) = 0
then
Failure_Class
else
null
end
from dbo.Location
Таблица Location содержит 25385 записей, но возвращается только 8157 записей. Почему записи отфильтровываются?
Когда я пытаюсь добавить в dbo.ModifiedLocation вышеупомянутый запрос, происходит сбой со следующей ошибкой: «Недопустимый параметр длины, переданный в функцию LEFT или SUBSTRING». Сообщение довольно наглядное, но почему возникает эта ошибка, когда я добавляю предложение in? Почему запрос выполняется нормально без предложения into?
Редактировать
Я хотел бы объяснить, чего я пытаюсь достичь. Исходный набор данных имеет две интересующие меня колонки: Eq Type и Failure_Class. Данные выглядят следующим образом:
Eq Type, Failure_Class
ACCU-ACCU, ACCU
AUX-AUX, AUX
VA-BA, VA
VA-CH, VA
IP-LS, IP
null, null
VE, VE
JB, JB
VA, null
Поскольку данные хранятся вручную, они противоречивы. Мне нужны данные в следующем формате, чтобы я мог импортировать их в свою систему управления активами.
Eq Type, Failure_Class
ACCU, ACCU
AUX, AUX
VABA, VA\VABA
VACH, VA\VACH
IPLS, IP\IPLS
null, null
VE, VE
JB, JB
VA, VA
Редактировать 2
Кажется, я нашел проблему. Я выполнял этот запрос в бесплатной версии Toad 5.6 для SQL Server. Когда я переключился на SSMS и удалил «into dbo.ModifiedLocation», запрос вызвал знакомую ошибку «Недопустимый параметр длины, переданный функции LEFT или SUBSTRING». Это отвечает на мой второй вопрос. Я предполагаю, что если я разрешу эту ошибку, я получу желаемый результат. Спасибо за вашу помощь.