我不断收到以下格式的数据:
物品 仪器------- ---------1|2|3 2014000012|3 2014000023 2014000031|4 201400004
并且需要输出:
物品工具------- ---------1 2014000012 2014000013 2014000012 2014000023 2014000023 2014000031 2014000044 201400004
我的答案是我知道的存储函数或过程,但是哪个? 此外,我是否编写函数或过程来接受我拥有的任何数据库中的列,或者我是否需要根据具体情况编写? 从本质上讲,这些报告经常被上交,我被要求将它们放入SQL中,以便可以进一步分析数据。
我希望这是有道理的。提前谢谢你的时间。
如果你有一个所有可能的项目的列表,那么你可以做:
select i.itemId, t.instrument
from table t join
items i
on '|' + t.items + '|' like '%|'+cast(i.itemId as varchar(255))+'|%';
原始代码:http://dotnetbites.com/split-strings-into-table
根据您的情况进行了修改:
CREATE FUNCTION [dbo].[SplitStringToTable]
(
@InputString VARCHAR(MAX) = ''
, @Delimiter CHAR(1) = ','
, @Instrument char(8)
)
RETURNS @RESULT TABLE(ID INT IDENTITY, Items VARCHAR(1000), Instrument char(8))
AS
BEGIN
DECLARE @XML XML
SELECT @XML = CONVERT(XML, SQL_TEXT)
FROM (
SELECT '<root><item>'
+ REPLACE(@InputString, @Delimiter, '</item><item>')
+ '</item></root>' AS SQL_TEXT
) dt
INSERT INTO @RESULT(Items, Instrument)
SELECT t.col.query('.').value('.', 'VARCHAR(1000)') AS Items , @Instrument As Instrument
FROM @XML.nodes('root/item') t(col)
RETURN
结束