使用SQL Server将多个Like行合并为一行

时间:2018-10-29 23:07:37

标签: sql sql-server

Newby在这里。我一直在慢慢地教自己如何使用SQL Server进行编程,到目前为止,该评估板一直是我学习的宝贵工具。但是,我无法解决当前的问题。

我有一个用管道分隔的大ascii文本文件。每行以记录类型开头,但是每种记录类型的编号可以不同。我有以ENCUD|开头的行,然后是字段标题,然后是字段值。

例如:

ENCUD|CUSTOMER NAME|Smith

,接下来的几行也以ENCUD|开头,但字段标题和字段值不同。

这些ENCUD值出现在整个文件中,其他记录介于它们出现的位置。

我要做的是合并所有以“ ENCUD |”开头的值并分组为一行。即

ENCUD|CUSTOMER NAME|Smith
ENCUD|CUSTOMER NUMBER|12345
ENCUD|CUSTOMER ID|6789
NEW RECORD|...
NEW RECORD|...
NEW RECORD|...
ENCUD|CUSTOMER NAME|Jones
ENCUD|CUSTOMER NUMBER|23456
ENCUD|CUSTOMER ID|9876

我想发生的事情是:

ENCUD|CUSTOMER INFORMATION|Smith|12345|6789
NEW RECORD|...
NEW RECORD|...
NEW RECORD|...
ENCUD|CUSTOMER INFORMATION|Jones|23456|9876

是否可以在SQL Server中执行此操作?

1 个答案:

答案 0 :(得分:0)

这是我解析C#中的文本以得出所需输出的方式。请记住,有很多方法可以做到这一点!

var lines = File.ReadLines(@"c:\temp\test.txt");    //read the file in
var newLines = new List<string>();                  //stores the desired output
var prevENCUD = false;                              //detects start of new ENCUD records

foreach (var line in lines)
{
    if (line.StartsWith("ENCUD"))
    {
        if (!prevENCUD) //add a new line
        {
            newLines.Add(line);
        }
        else            //splits the line and adds just the customer number
        {
            var fields = line.Split('|');
            newLines[newLines.Count - 1] = newLines[newLines.Count - 1] + "|" + fields[fields.Length - 1];
        }

        prevENCUD = true;
    }
    else  //adds any record that isn't ENCUD
    {
        newLines.Add(line);
        prevENCUD = false;
    }
}