2011-12-31 4 views
1

Я озадачен выходом следующего запроса:Нужна помощь в понимании запроса с участием «дела» и «выбрать в» пункты

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 
  1. В таблице Расположения содержит 25385 записей, но только 8157 записей вернулся. Почему файлы отфильтрованы?

  2. Когда я пытаюсь добавить в dbo.ModifiedLocation к вышеуказанному запросу, он выходит из строя со следующей ошибкой: «Неверный параметр длины передан функции LEFT или SUBSTRING». Сообщение довольно наглядное, но почему эта ошибка возникает, когда я добавляю в предложение? Почему запрос выполняется нормально без предложения?

Редактировать Я хотел бы объяснить, что я пытаюсь достичь. В исходном наборе данных есть две колонки, которые меня интересуют: 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 

Edit 2 Кажется, что я нашел эту проблему. Я выполнял этот запрос в бесплатной версии Toad 5.6 для SQL Server. Когда я переключился на SSMS и удалил «в dbo.ModifiedLocation», запрос поднял знакомый параметр «Неверная длина», переданный функции LEFT или SUBSTRING ». Это отвечает на мой второй вопрос. Я предполагаю, что если я разрешу эту ошибку, я получу желаемый результат. Спасибо за помощь.

+1

Можете ли вы опубликовать данные или образец данных из dbo.Location и результат, который вы получите при запуске инструкции, чтобы кто-то помог –

+0

@Trevor Done. Надеюсь, он разъясняет, чего я пытаюсь выполнить. –

ответ

3

Для вставки в существующую таблицу, необходимо INSERT INTO dbo.ModifiedLocation SELECT ...

Синтаксис SELECT ... INTO dbo.ModifiedLocation FROM ... для создания таблицы, а также вставки в него.


Что касается количества возвращаемых записей. Если у вас нет предложения JOIN или WHERE или GROUP BY или DISTINCT, это должно возвращать ровно столько же записей, сколько существует в исходной таблице.

Это именно тот запрос, который вы используете?

+0

Да, это именно тот запрос, который я запускаю. Я хотел бы создать новую таблицу ModifiedLocation и вставить в нее измененные данные. Это упражнение ETL, но у меня нет доступа к службам интеграции SQL Server, поэтому я делаю это «вручную». –

 Смежные вопросы

  • Нет связанных вопросов^_^