У меня есть запрос, как:Выберите несколько строк из SQL в одну строку в подзапроса
DECLARE @razem VARCHAR(MAX);
SELECT Ordering.orderID ,
Document.number,
(User_info.name +' '+ User_info.surname),
Ordering.dateStart,
Ordering.dateEnd ,
(
select COALESCE(' ',@razem)+sell_type.name as r
from Ordering_sell_type, Sell_type
where orderID = Ordering.orderID and
Ordering_sell_type.sell_typeID = sell_type.sell_typeID
) podz
FROM Ordering, User_info, Product_Document, Document, Document_type
WHERE Ordering.orderID = Product_document.orderID
AND Document.documentID = Document_type.documentID
AND Document.documentID = Product_document.documentID
AND Ordering.userID = User_info.userID
AND Ordering.isClosed = 1 AND Document_type.typeID = 1
GROUP BY Document.isitfiscal, Document.refDocID,
Document.number, Ordering.orderID, User_info.name,
User_info.surname, Ordering.dateStart,
Ordering.dateEnd , Ordering.isCLosed
ORDER BY Ordering.dateEnd
И в этой функции COALESCE Я хочу, чтобы получить все виды оплаты для выбранного заказа - например, идентификатор заказа 123 имеют payTypes = Card , Cash, orderID имеют payTypes = Cash.
Проблема заключается в том, что я хочу иметь его в одном просто грести в качестве последней строки основного запроса, как: OrderID, Document.number, UserInfo.name + фамилия, dateStart, dateEnd, -> карта, наличные деньги < - но после попытки запроса, как указано выше, я получил ошибку:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
потому что он возвращает более одной строки. Возможно ли, получить типы оплаты в подзапросе и вернуть в виде одной строки?
Какие СУБД вы используете? – sgeddes
В оракуле: функции WM_CONCAT, LISTAGG или XMLAGG превратят несколько строк, которые поделились бы подобными данными в список. Coalese работает только по одной строке и не объединяет строки. [XMLpath] (http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-microsoft-sql-server-2005) в SQL-сервере, я считаю, что подобные комбинации; Я думаю, что mySQL использует [Group_Concat] (http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html # function_group-concat) – xQbert