Я нахожусь в базе данных db2 по системе as400.У меня есть запрос на выборку, который выдает ошибку в заголовке: код SQL0802, который является «недопустимыми числовыми данными» (переведено).
Я попытался разделить запрос на разные части и тестировать каждую часть одну за другой.чтобы убедиться, что это работает, я на 99% убежден, что проблема возникает из-за предложения «CAST», которое я использую в подзапросе (для преобразования CHAR в INT), я просто не понимаю, почему подзапрос работает сам по себе, но этоне работает как часть основного запроса.
Так что, если я запускаю подзапрос с предложением «CAST», он работает нормально, но когда я запускаю основной запрос, который использует подзапрос, он не работаети ошибка возникает.Основной запрос можно разделить на 2 запроса, см. Код ниже.
query1 выглядит примерно так:
select SUM(Price) from TABLE1
where X = 1
group by Country
having SUM(Price) = (query2);
query2 выглядит примерно так:
SELECT SUM(UnitPrice * AmountStocked)
FROM TABLE2
WHERE J = X and ItemNumber in (
SELECT CAST(ItmNumbr AS INT) from TABLE3
where Id in (select Id from TABLE4 where Z=Y)
)
Примечания:
* query2 вернет одно число.
* Выполнение запроса2 само по себе работает нормально.
* Выполнение запроса 1 без предложения «Имеется» также работает нормально.
* Если я заменим подзапрос «SELECT CAST ...» в query2 на что-то вроде «(2002, 9912, 1234)», а затем выполню основной запрос, он будет работать нормально, так что это в значительной степени подтверждает, что проблемаэто предложение "CAST".
* Мне нужно CAST ItmNumbr в INT, потому что ItemNumber имеет числовой тип, а ItmNumbr - тип Char.