[英]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
它将给出以下输出:
希望对您有所帮助。 我要感谢我的朋友Bhushan在此方面的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.