繁体   English   中英

在SQL Server中插入2个定界字符串

[英]Inserting 2 delimited strings into SQL Server

我有一个简单的select语句,该语句可以从名为WCvsNIRTemps的表中获取一串产品代码,并将它们显示在单独的行中。

SELECT 
Split.a.value('.', 'VARCHAR(100)') AS ProdCodes 
FROM  (SELECT   
CAST ('<M>' + REPLACE([ProdCodes], ',', '</M><M>') + '</M>' AS XML) AS String
FROM  WCvsNIRTemps where TemplateName = 'TempName') AS A CROSS APPLY String.nodes ('/M') AS Split(a)

如何显示两列数据? 分隔字符串包含两个字符串的正确顺序。 因此,第一个列出的产品代码与我要显示的新列prodnam中列出的第一个项目相关。 透视表也许是一个聪明的主意。 这是我的尝试。

SELECT 
Split.a.value('.', 'VARCHAR(100)') AS ProdCodes, Split2.b.value('.', 'VARCHAR(100)') AS ProdNams 
FROM  (SELECT   
CAST ('<M>' + REPLACE([ProdCodes], ',', '</M><M>') + '</M>' AS XML) AS String
FROM  WCvsNIRTemps where TemplateName = 'TempName') AS A 
 CROSS APPLY String.nodes ('/M') AS Split(a),
(SELECT   
CAST ('<M>' + REPLACE([ProdNams], ',', '</M><M>') + '</M>' AS XML) AS String
FROM  WCvsNIRTemps where TemplateName = 'TempName') AS B
 CROSS APPLY String.nodes ('/M') AS Split2(b)

WCvsNIRtemps表:

**TemplateName  |  ProdCodes             |  Prodnams**
TempName           prodc1,prodc2,prodc3     prodn1,prodn2,prodn3

所需查询输出:

**Prodcode |  Prodnam**
prodc1        prodn1
prodc2        prodn2
prodc3        prodn3

请尝试以下操作,它将对您有所帮助:

    ;WITH CTE AS(
    SELECT   M.N.value('.[1]','VARCHAR(8000)') AS PRODUCT_CODES, ROW_NUMBER() over(order by M.N.value('.[1]','VARCHAR(8000)') ASC) as Prod_ID,
    P.Q.value('.[1]','VARCHAR(8000)') AS PRODUCT_NAMES, ROW_NUMBER() over(order by P.Q.value('.[1]','VARCHAR(8000)') ASC) as ProdName_ID
    FROM
    (
     SELECT CAST('<XMLROOT><ROWDATA>' + REPLACE(PRODCODES,',','</ROWDATA><ROWDATA>') + '</ROWDATA></XMLROOT>' AS XML) AS X,
     CAST('<XMLROOT><ROWDATA>' + REPLACE(PRODNAMS,',','</ROWDATA><ROWDATA>') + '</ROWDATA></XMLROOT>' AS XML) AS Y          
     FROM   TEMPTABLE
    )T
    CROSS APPLY X.nodes('/XMLROOT/ROWDATA')M(N)
    CROSS APPLY Y.nodes('/XMLROOT/ROWDATA')P(Q))
    SELECT DISTINCT A.PRODUCT_CODES,B.PRODUCT_NAMES FROM CTE A INNER JOIN CTE B
    ON A.PROD_ID=B.PRODNAME_ID ORDER BY A.PRODUCT_CODES

它将给出以下输出:

delimited_string_to_sql

希望对您有所帮助。 我要感谢我的朋友Bhushan在此方面的帮助。

暂无
暂无

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

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