Как разделить поля в подзапросе и Sql Server Case Statement

Это означает, что вы пытаетесь получить доступ к индексу массива, который недопустим, поскольку он не находится между границами.

Например, это инициализировало бы примитивный целочисленный массив с верхней границей 4 .

int intArray[] = new int[5];

Программисты подсчитываются с нуля. Таким образом, это, например, выбрало бы ArrayIndexOutOfBoundsException, поскольку верхняя граница равна 4, а не 5.

intArray[5];
0
задан Paulo Mattos 16 January 2019 в 15:12
поделиться

1 ответ

Запрос, вызвавший проблему: SELECT TOTAL_PRFT / NO_OF_INSTALLMENT FROM InsightSource.BS.IS_H_LD_SCHEDULE. Он должен возвращать только одну строку данных, ваш возвращает несколько.

Здесь есть две проблемы:

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

ID Total_prft No_Of_Installment
1     15            3
2     20            5

Тогда вы можете сделать так: SELECT TOTAL_PRFT / NO_OF_INSTALLMENT FROM InsightSource.BS.IS_H_LD_SCHEDULE WHERE ID = @ID, где @ID - это предопределенная переменная (возможно, вы можете получить ее из таблицы GL) .

Или, как рекомендует @Suraj Kumar, вы также можете использовать ключевое слово TOP 1, если оно работает для вас.

2- Другая проблема заключается в том, что вы не проверяете, является ли No_OF_Installment нулевым или нулевым, что приведет к ошибке деления. Пожалуйста, добавьте чек, добавив что-то вроде:

WHEN LDContractType = 'AMORT' THEN (
          case when NO_OF_INSTALLMENT IS NOT NULL AND NO_OF_INSTALLMENT > 0
               THEN SELECT TOTAL_PRFT / NO_OF_INSTALLMENT FROM InsightSource.BS.IS_H_LD_SCHEDULE
               ELSE 0 
          END)
...
0
ответ дан Eray Balkanli 16 January 2019 в 15:12
поделиться