Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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
C# 删除“-”之后的字符串,并将剩余的字符串和透视列分组_C#_.net_Pivot_Oledbdataadapter - Fatal编程技术网

C# 删除“-”之后的字符串,并将剩余的字符串和透视列分组

C# 删除“-”之后的字符串,并将剩余的字符串和透视列分组,c#,.net,pivot,oledbdataadapter,C#,.net,Pivot,Oledbdataadapter,这是我在Excel中的实际数据,我能够在C Windows应用程序中的DataGridView中成功读取这些数据 Test | Energy | --------------------- C018-3L-1 | 113 | C018-3L-2 | 79 | C018-3L-3 | 89 | C018-3L-4 | 90 | C018-3L-5 | 95 | C021-3T-1 | 115 | C021-3T-2 | 100

这是我在Excel中的实际数据,我能够在C Windows应用程序中的DataGridView中成功读取这些数据

Test       | Energy |
---------------------
C018-3L-1  | 113    |
C018-3L-2  | 79     |
C018-3L-3  | 89     |
C018-3L-4  | 90     |
C018-3L-5  | 95     |
C021-3T-1  | 115    |
C021-3T-2  | 100    |
但现在我希望DataGridView中的这些数据采用excel文件中的以下格式:

这是我的密码:

    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 By实现这一点?

我将提供一个基于SQL Server的答案,正如您所要求的那样。在这里,您根本没有用[sql server]标记您的问题。。。希望这有助于

这是一个很好的理由,为什么你永远不应该在一个栏目里放一个以上的内容。将其存储在单独的列中,这样会容易得多

此外,这闻起来有点。。。这些问题应该在表示层中解决

然而,这可以做到:

DECLARE @tbl TABLE(Test VARCHAR(100),Energy INT);
INSERT INTO @tbl VALUES
 ('C018-3L-1',113)
,('C018-3L-2',79)
,('C018-3L-3',89)
,('C018-3L-4',90)
,('C018-3L-5',95)
,('C021-3T-1',115)
,('C021-3T-2',100);

SELECT p.*
FROM
(
    SELECT B.Code
          ,(B.Number-1)/3 AS Line
          ,CONCAT('Energy-',CASE B.Number % 3 WHEN 0 THEN 3 ELSE B.Number % 3 END) AS ColumnName
          ,Energy
    FROM @tbl t
    CROSS APPLY(SELECT LEN(t.Test) - CHARINDEX('-',REVERSE(t.Test))) A(PosLastHyphen)
    CROSS APPLY(SELECT LEFT(t.Test,PosLasthyphen) AS Code
                      ,CAST(SUBSTRING(t.Test,PosLastHyphen+2,10) AS INT) AS Number) B
) tbl
PIVOT
(
    MAX(Energy) FOR ColumnName IN([Energy-1],[Energy-2],[Energy-3])
) p
ORDER BY Code,Line;
结果

+---------+------+----------+----------+----------+
| Code    | Line | Energy-1 | Energy-2 | Energy-3 |
+---------+------+----------+----------+----------+
| C018-3L | 0    | 113      | 79       | 89       |
+---------+------+----------+----------+----------+
| C018-3L | 1    | 90       | 95       | NULL     |
+---------+------+----------+----------+----------+
| C021-3T | 0    | 115      | 100      | NULL     |
+---------+------+----------+----------+----------+
一些解释


我使用交叉应用程序来计算代码和运行编号之间的间隔。然后我用整数除法计算组,用模运算符%将其分成三列。

你能解释一下下面的格式吗?为什么测试C018-3L的能量-1是90?@SeM实际上我想要3人一组的能量,所以excel文件中的测试“`C018-3L-4``90自动位于数据网格视图中的能量-1列下。您好@Shnugo先生。。我成功地解决了我的问题。我创建了查询的存储过程,从excel文件中读取数据后,我将该数据存储在数据表中,并将该数据表传递给存储过程,然后在数据网格视图中获得所需的输出。再次非常感谢。@dmegha这听起来有点复杂,但我很高兴这对你有用@dmegha我最后想请你接受一个你最喜欢的答案来结束你之前的第二个问题。Thx和快乐编码!
+---------+------+----------+----------+----------+
| Code    | Line | Energy-1 | Energy-2 | Energy-3 |
+---------+------+----------+----------+----------+
| C018-3L | 0    | 113      | 79       | 89       |
+---------+------+----------+----------+----------+
| C018-3L | 1    | 90       | 95       | NULL     |
+---------+------+----------+----------+----------+
| C021-3T | 0    | 115      | 100      | NULL     |
+---------+------+----------+----------+----------+