SQL Server:在一个select语句中选择多个记录

时间:2015-05-25 12:29:39

标签: sql sql-server select

在像这样的查询中:

on mouseUp
   put the dgHilitedLines of group "data" into theLine
   answer theLine
end mouseUp

我的结果显示如下:

SELECT * 
FROM `Order`
WHERE `CustID` = '1'

如何编写SQL语句,以获得类似这样的结果?:

| CustID| Order |
-----------------
| 1     | Order1|
| 1     | Order2|
| 1     | Order3|
-----------------

在mySQL中,可以使用| CustID| Order | --------------------------------- | 1 | Order1, Order2, Order3| --------------------------------- ,但在SQL Server中,它会出现类似语法错误的错误。

3 个答案:

答案 0 :(得分:6)

使用xml路径(see fiddle

SELECT distinct custid, STUFF((SELECT ',' +[order]
FROM table1 where custid = t.custid
FOR XML PATH('')), 1, 1, '')
FROM table1 t
where t.custid = 1

STUFF用空字符串替换第一个,,即删除它。你需要一个独特的,否则它将匹配所有订单,因为其位于custid。

FOR XML
PATH Mode
STUFF

答案 1 :(得分:4)

您可以使用Stuff函数和For xml子句,如下所示:

 SELECT DISTINCT CustId, STUFF((
   SELECT ','+ [Order]
   FROM [Order] T2
   WHERE T2.CustId = T1.CustId
   FOR XML PATH('')
 ), 1, 1, '')
 FROM  [Order] T1

fiddle here

注意:使用order作为表名或列名是一个非常非常糟糕的主意。有一个原因,他们称保留字保留 请参阅this link,了解我最喜欢避免此类事情的方法。

答案 2 :(得分:-1)

试试这个。 更改您需要的表名称和列名称;

SELECT custID, 
       LISTAGG(Order, ', ') WITHIN GROUP (ORDER BY Order) text
  FROM table_name
 GROUP BY custID

编辑MSSQL。你应该使用group_concat函数。

SELECT custID, GROUP_CONCAT(Order)
  FROM table_name
 WHERE CustID = 1
 GROUP BY custID;