我从查询中返回以下数据:
+-------------------------------------+
| **SUM** **Account** |
+-------------------------------------+
| A & E FEE 182396 |
| CM FEE 108569 |
| CONTRACT VALUE 2256044 |
| OVERHEAD 197397 |
+-------------------------------------+
我需要选择对象属性AeFee,CmFee,ContractValue和Overhead,它们基本上会使属性成为列标题,所以我需要数据看起来像:
+--------+--------+---------------+----------+
| AeFee | CmFee | ContractValue | Overhead |
+--------+--------+---------------+----------+
| 182396 | 108569 | 2256044 | 197397 |
+--------+--------+---------------+----------+
我尝试使用子选择来选择类似这样的东西(伪代码)
Select(s => new
{
AeFee = Sum if [Account] == "A & E FEE"
}
此链接显示了我尝试使用SQL数据透视图的确切内容。将行转换为列。 SQL Pivot
有什么想法吗?
答案 0 :(得分:1)
我总是喜欢一个答案是聚合的问题。
var result = data.Aggregate(
// base object to store
new { A = 0, CM = 0, CO = 0, O = 0},
// add in an element
(a,d) => {
switch(d.sum)
{
case "A & E FEE":
a.A += d.Account;
break;
case "CM FEE":
a.CM += d.Account;
break;
//etc
}
return a;
});
注意你也可以 - 不知道这种方式的d.sum的可能值 - 你需要使用和expando对象。这看起来像这样(没有测试)
var result = data.Aggregate(
// base object to store
new ExpandoObject()
// add in an element
(a,d.sum.Replace(" ","_") => {
a[d.sum.Replace(" ","_")] += d.Account;
return a;
});
如果您的和字符串具有在属性标识符中无效的值,则不会起作用。
答案 1 :(得分:0)
这产生了我正在寻找的结果
std::string errs_to_string(Errs::Errs errCode)
{
static const std::map<Errs::Errs, std::string> errStr {
{ Errs::Errs::ERR_TEST1, "ERR_TEST1" },
{ Errs::Errs::ERR_TEST2, "ERR_TEST2" },
{ Errs::Errs::ERR_TEST3, "ERR_TEST3" }
};
return errStr.at(errCode) ;
}