我有两个表订单和公司。公司表包含唯一的公司ID和公司名称。
“订单”表有两列,一列是orderid,另一列是companyID。 CompanyId可以是多个逗号分隔的值。
我正在使用以下查询来获取与订单表中每个公司ID对应的公司名称。
SELECT
(SELECT GROUP_CONCAT(cmp.cmpny_name)
FROM company cmp
WHERE FIND_IN_SET(cmp.CompanyID, odr.companyIDs)
) AS company
FROM orders odr
它在Mysql中工作得很好,但在sql server中却不能,因为这些关键字在sql server中不受支持,而且我在sql server上工作的还不是很多,所以请帮助我找到正确的方法来实现这一目标。
谢谢
在搜索中,我找到了一些关键字,例如用于组连合的东西,但无法正确使用。找不到与SQL Server的find_in_set等效的对象。
SELECT
(SELECT GROUP_CONCAT(cmp.cmpny_name)
FROM company cmp
WHERE FIND_IN_SET(cmp.CompanyID, odr.companyIDs)
) AS company
FROM orders odr
在sql server中不工作
答案 0 :(得分:0)
GroupConcat可以替换为STRING_AGG() 并且您还可以用CONCAT(',',yourVariable,',')LIKE CONCAT('%,',youOtherVariable,',%')
替换Find_In_Set所以我认为这可能对您有帮助
SELECT
(SELECT STRING_AGG(cmp.cmpny_name,',')
FROM company cmp
WHERE CONCAT(',',cmp.CompanyID,',') LIKE CONCAT('%,',odr.companyIDs,',%')
) AS company
FROM orders odr
参考:
FIND_IN_SET() equivalent in SQL Server
https://database.guide/the-sql-server-equivalent-to-group_concat/
答案 1 :(得分:0)
如果SQL Server 2016的较低拆分功能应以其他方式编写,则此方法应与SQL Server 2016一起使用
SELECT
STUFF( (
SELECT ',' + cmp.cmpny_name
FROM company cmp
WHERE cmp.CompanyID IN (SELECT value FROM STRING_SPLIT (odr.companyIDs,','))
FOR XML PATH('')), 1, 1, NULL) AS company
FROM orders odr
如果是SQL Server 2017
SELECT
(SELECT STRING_AGG(cmp.cmpny_name)
FROM company cmp
WHERE cmp.CompanyID in (SELECT value FROM string_split (odr.companyIDs,','))
) AS company
FROM orders odr