Rami Zoarob Ответов: 2

Я хочу помочь исправить этот SQL код


этот запрос возвращает это сообщение

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.


Что я уже пробовал:

SELECT (a.NumUnit*(SELECT  sp.PriceUnitSale
FROM    SalePrice sp
        INNER JOIN
        (
            SELECT  ProNo, MAX(PriceLastDate) max_date
            FROM    SalePrice
            GROUP   BY ProNo
        ) spt ON  sp.ProNo =a.ProNo AND sp.PriceLastDate = spt.max_date))Amount

FROM    StoreBalance a
        INNER JOIN
        (
            SELECT  ProNo, MAX(BalanceDate) max_date,MAX(BalanceNo) max_No
            FROM    StoreBalance
            GROUP   BY ProNo
        ) b ON  a.ProNo =b.ProNo AND
                a.BalanceDate = b.max_date and  a.BalanceNo = b.max_No and year(BalanceDate)='2019'

Jörgen Andersson

Держу пари, что у вас есть дубликаты строк с PriceLastDate = MAX(PriceLastDate)

2 Ответов

Рейтинг:
1

Maciej Los

Оригинал Грифф прав.
Кроме того я настоятельно рекомендую прочитать эту интересную статью: Поиск причины ошибки “подзапрос вернул более 1 значения” | SQL Studies[^]


Рейтинг:
0

OriginalGriff

Ошибка означает именно то, что она говорит: ваш подзапрос вернул более одного значения.
Ваш код эффективно работает

SELECT a_column * (a_subquery) Amount FROM Mytable
И a_subquery возвращает более одного значения - это означает, что вы просите SQL умножить NumUnit на несколько значений, и он этого не сделает.

Вам нужно внимательно посмотреть на свой подзапрос - и я бы предложил запустить его самостоятельно, чтобы увидеть, что он возвращает, - и отсортировать его так, чтобы он возвращал только одно значение.

К сожалению, мы не можем этого сделать: у нас нет доступа к вашей БД, и мы понятия не имеем, на что вы пытаетесь умножить NumUnit!


Maciej Los

5ed!