繁体   English   中英

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

[英]SQL Server: Select multiple records in one select statement

在这样的查询中:

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

我的结果显示如下:

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

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

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

在mySQL中,可以使用Group_Concat ,但在SQL Server中,它会给出诸如语法错误之类的错误。

使用xml路径( 请参阅小提琴

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替换第一个,用一个空字符串,即删除。 您需要一个与众不同的商品,否则,由于在哪里,所有订单都会有一个匹配项。

对于XML
路径模式
东西

您可以像这样使用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

在这里摆弄

注意:使用order作为表名或列名是一个非常非常糟糕的主意。 还有一个原因,他们称之为保留的保留字。
请参阅此链接,以获取我最喜欢的避免此类情况的方法。

尝试这个。 根据需要更改表名和列名;

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM