在像这样的查询中:
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中,它会出现类似语法错误的错误。
答案 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。
答案 1 :(得分:4)
SELECT DISTINCT CustId, STUFF((
SELECT ','+ [Order]
FROM [Order] T2
WHERE T2.CustId = T1.CustId
FOR XML PATH('')
), 1, 1, '')
FROM [Order] T1
注意:使用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;