下面是我在Excel中的实际数据,我可以在DataGridView中成功地在C# Windows应用程序中读取这些数据。
Test | Energy |
---------------------
C018-3L-1 | 113 |
C018-3L-2 | 79 |
C018-3L-3 | 89 |
C021-3T-1 | 115 |
C021-3T-2 | 100 |但是现在我希望这些数据是DataGridView格式的,格式如下:
Test |Energy-1|Energy-2|Energy-3 |
------------------------------------
C018-3L |113 |79 |89 |
C021-3T |115 |100 |NULL |这是我的代码:
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实现这一目标?
发布于 2019-02-20 11:39:13
这是用[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)
,('C021-3T-1',115)
,('C021-3T-2',100);这是查询
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;结果
Test Energy-1 Energy-2 Energy-3
C018-3L 113 79 89
C021-3T 115 100 NULL一些解释:
这依赖于字符串的固定格式和最多3列。另一种方法是搜索最后一个连字符,并使用它的位置来拆分前面部分和数字中的字符串。有了不同数量的数字,您必须知道预期的最大值,或者必须完全遍历一个通用路径(例如,动态SQL)。
发布于 2019-02-20 12:00:02
另一种方法可以是使用CASE
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 https://stackoverflow.com/questions/54785258
复制相似问题