ataisi Ответов: 3

Подзапрос вернул более 1 значения. Это не разрешается


select  Row_Number() OVER(order by orderNumber ) as SN, IIF( orderStatus = 'Completed','Unused', orderStatus) as VoucherStatus,cardAmount as Amount,card_pin as VoucherPin, orderNumber as BatchNo,cardpin_sn as SerialNumber,   
   (select dname from users where username=(select depositor from Bankdeposit where cardpin=orderdetails.card_pin)) 
  +' ('+  (select saveaseid from users where username=(select depositor from Bankdeposit where cardpin=orderdetails.card_pin))+')'  as UsedBy,
  (select transactionDate from Bankdeposit where cardpin=orderdetails.card_pin) as UsedDate
   from  orderdetails where orderby=@in_uname
	  and orderStatus='completed' order by orderNumber


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

набрал гугл но ответа нет

3 Ответов

Рейтинг:
2

Christian Graus

Несколько подзапросов-это неправильный способ сделать это.


username=(select depositor from Bankdeposit where cardpin=orderdetails.card_pin)


Ошибка означает, что вы получаете более одного результата. Если вы получаете много строк с одинаковым результатом, используйте TOP 1 или DISTINCT.

Я бы никогда не использовал подзапросы, я бы использовал CTE для присоединения. У меня есть статья на CP о CTEs


Рейтинг:
2

Patrice T

Цитата:
Подзапрос вернул более 1 значения. Это не разрешается

А простое, вашего выбора включает некоторые внутри себя.
Каждая внутренняя выберите размер доходности 1 и только 1 строку с только 1 поле, таким образом, значение 1.
1 из ваших подзапросов возвращает 0 или более 1 строки.
Проверьте количество строк в них:
select depositor from Bankdeposit where cardpin=orderdetails.card_pin

select dname from users where username=(select depositor from Bankdeposit where cardpin=orderdetails.card_pin)

select saveaseid from users where username=(select depositor from Bankdeposit where cardpin=orderdetails.card_pin)


Рейтинг:
0

ataisi

это работает
выберите функции row_number() над(заказ номер заказа ), а СН ИИФ( orderStatus = 'завершено','неиспользованный', orderStatus) как VoucherStatus,cardAmount как сумма,card_pin как VoucherPin, номер заказа, как BatchNo,cardpin_sn как SerialNumber,
(выберите dname в из пользователей, где имя пользователя=(выберите вкладчика от Bankdeposit где cardpin= "заказано".card_pin))
+' ('+ (выберите saveaseid из пользователей, где имя пользователя=(выберите вкладчика от Bankdeposit где cardpin= "заказано".card_pin))+')', как используется в,
(выберите transactionDate из Bankdeposit, где cardpin=orderdetails.card_pin) в качестве UsedDate
из orderdetails, где orderby=@in_uname
и orderStatus='б' заказ номер заказа