tSQL 将列中的数据拆分为新表



我不断收到以下格式的数据:

物品 仪器-------       ---------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 

结束

最新更新