繁体   English   中英

mysql查询需要在具有find_in_set和group_concat关键字的sql服务器中进行转换

[英]mysql query needs to be converted in sql server having find_in_set and group_concat keywords

我有两个表订单和公司。 公司表包含唯一的公司ID和公司名称。

订单表有两列,一列是orderid,另一列是companyID。 CompanyIds可以是多个逗号分隔的值。

我正在使用以下查询来获取与订单表的每个公司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中不起作用

可以用STRING_AGG()代替GroupConcat,也可以用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

参考:

SQL Server中的FIND_IN_SET()等效项

https://database.guide/the-sql-server-equivalent-to-group_concat/

如果应使用其他方式编写其较低的拆分功能,则此方法应与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

暂无
暂无

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

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