我无法控制数据在此表中的保存方式。但是,我必须查询表并将类似pn_id列的数据组合为一行/记录。
例如,当前的数据结构如下,
这里我们使用不同的问题ID重复相同的pn_id。根据我的观点,这本应该真的保存为一个pn_id,然后将每个问题保存为一个单独的列。但是,我必须将以下数据检索为这样的一条记录..
知道如何做到这一点?
谢谢
答案 0 :(得分:2)
结构很好。每个问题都有一列是没有意义的,因为每次添加新问题时都必须添加一个新列。
PIVOT可以轻松解决您的问题。请查看this链接以获取解释
答案 1 :(得分:2)
这是变换算法的一些伪代码。请注意,它需要扫描整个数据集两次;还有一些提高效率的机会,例如,如果可以对输入数据进行排序。此外,由于它是伪代码,我没有添加空值处理。
var columnNames = new HashSet<string> { "pn_id" };
foreach (var record in data)
columnNames.Add(record.question_id.ToString());
var table = new DataTable();
foreach (var name in columnNames)
table.Columns.Add(new DataColumn(name, typeof(string)));
foreach (var record in data)
{
var targetRecord = CreateNewOrGetExistingRecord(table, record.pn_id);
targetRecord[record.question_id.ToString()] = record.char_value ?? record.date_value.ToString();
}
这是辅助方法的草图:
DataRow CreateNewOrGetExistingRecord(DataTable table, object primaryKeyValue)
{
var result = table.Find(primaryKeyValue);
if (result != null)
return result;
//add code here to create a new row, add it to the table, and return it to the caller
}