首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串中移除“-”之后的字符,并将剩余字符串组合在一起

从字符串中移除“-”之后的字符,并将剩余字符串组合在一起
EN

Stack Overflow用户
提问于 2019-02-20 11:28:23
回答 2查看 130关注 0票数 0

下面是我在Excel中的实际数据,我可以在DataGridView中成功地在C# Windows应用程序中读取这些数据。

代码语言:javascript
复制
Test       | Energy |
---------------------
C018-3L-1  | 113    |
C018-3L-2  | 79     |
C018-3L-3  | 89     |
C021-3T-1  | 115    |
C021-3T-2  | 100    |

但是现在我希望这些数据是DataGridView格式的,格式如下:

代码语言:javascript
复制
Test    |Energy-1|Energy-2|Energy-3 |
------------------------------------
C018-3L |113     |79      |89       |
C021-3T |115     |100     |NULL     |

这是我的代码:

代码语言:javascript
复制
    private void TensileEnergyData_Load(object sender, EventArgs e)
    {
        try
        {
            string sourcefilepath = ConfigurationManager.AppSettings["FilePath"].ToString();

            string[] files = Directory.GetFiles(sourcefilepath, "*.xlsx");
            foreach (string s in files)
            {
                string excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + s + ";Extended Properties='Excel 12.0;HDR=YES';";

                // Create Connection to Excel Workbook
                using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
                {
                    connection.Open();
                    da = new OleDbDataAdapter("Select Test, Energy FROM [Sheet1$]", connection);
                    da.Fill(dtExcelData);
                    connection.Close();
                }
            }
        }
        catch (Exception ex)
        {
            objDAL.SendExcepToDB(ex, "TensileEnergyData_Load");
            MessageBox.Show("Fail to read data...!!");
        }
        dataGridView1.Visible = true;
        dataGridView1.DataSource = dtExcelData;
    }

如何使用Group实现这一目标?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-20 11:39:13

这是用[sql-server]标记的。这是一种SQL-Server方法:

你可以试试这个

我创建了一个模型表

代码语言:javascript
复制
DECLARE @tbl TABLE(Test VARCHAR(100),Energy INT);
INSERT INTO @tbl VALUES
 ('C018-3L-1',113)
,('C018-3L-2',79)
,('C018-3L-3',89)
,('C021-3T-1',115)
,('C021-3T-2',100);

这是查询

代码语言:javascript
复制
SELECT p.*
FROM
(
    SELECT LEFT(t.Test,7) AS Test
          ,CONCAT('Energy-',RIGHT(t.Test,1)) AS ColumnName
          ,Energy
    FROM @tbl t
) tbl
PIVOT
(
    MAX(Energy) FOR ColumnName IN([Energy-1],[Energy-2],[Energy-3])
) p;

结果

代码语言:javascript
复制
Test        Energy-1    Energy-2    Energy-3
C018-3L     113         79          89
C021-3T     115         100         NULL

一些解释:

这依赖于字符串的固定格式和最多3列。另一种方法是搜索最后一个连字符,并使用它的位置来拆分前面部分和数字中的字符串。有了不同数量的数字,您必须知道预期的最大值,或者必须完全遍历一个通用路径(例如,动态SQL)。

票数 1
EN

Stack Overflow用户

发布于 2019-02-20 12:00:02

另一种方法可以是使用CASE

代码语言:javascript
复制
SELECT t.Test, 
       Max(energy1) [Energy-1], 
       Max(energy2) [Energy-2], 
       Max(energy3) [Energy-3] 
FROM   (SELECT LEFT(test, Len(test) - Charindex('-', Reverse(test))) Test, 
              case  when test like '%-1' then Energy  else null end 'Energy1',
              case  when test like '%-2' then Energy  else null end 'Energy2',
              case  when test like '%-3' then Energy  else null end 'Energy3'
        FROM   [TABLE_NAME]) t 
GROUP  BY t.test 

Online Demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54785258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档