Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的管道内联分离_Sql_Sql Server - Fatal编程技术网

SQL中的管道内联分离

SQL中的管道内联分离,sql,sql-server,Sql,Sql Server,嗨,我在执行查询时有以下数据 我也有一个函数,它将管道seprate column ReportType,但它正在写入我的列 我想要以下格式的结果 ItemID |ReportType|EmailAddrress |FirstName|LastName 1 | 1 |abc@gmail.com| test |test 1 | 2 |abc@gmail.com| test1 |test1 我的SQL函数似乎没有用 我的职能是 ALT

嗨,我在执行查询时有以下数据

我也有一个函数,它将管道seprate column ReportType,但它正在写入我的列

我想要以下格式的结果

ItemID |ReportType|EmailAddrress |FirstName|LastName
1      |        1  |abc@gmail.com| test    |test 
1      |        2  |abc@gmail.com| test1   |test1
我的SQL函数似乎没有用

我的职能是

ALTER FUNCTION [dbo].[fnSplit](
    @sInputList VARCHAR(8000) -- List of delimited items
  , @sDelimiter VARCHAR(8000) = '|' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))

BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
 BEGIN
 SELECT
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))

 IF LEN(@sItem) > 0
  INSERT INTO @List SELECT @sItem
 END

IF LEN(@sInputList) > 0
 INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
选择是正常查询

选择ItemId、ReportType、EmailAddress、FirstName、LastName
从EmailInfo

如果我正确理解了您的问题,那么我认为这就是您想要实现的目标

SELECT ItemId, col.item AS ReportType, EmailAddress, FirstName, LastName
FROM EmailInfo
CROSS APPLY dbo.fnSplit(ReportType, '|') col

我认为应该是col.item作为报告类型,但这似乎是OP想要的。@PushkarPhule:很高兴帮助你。