在Mysql中获取行到列

时间:2015-03-10 05:30:31

标签: mysql database

我有这样的场景。 需要以格式显示类型和金额。 需要帮助

ParamID  ProblemID  Data  FIELDID
 1247176  285135  2.Materials  283
 1247177  285135  2557.8  284
 1247314  285132  2.Materials  283
 1247315  285132  2889.1  284
 1247320  284848  2.Materials  283
 1247321  284848  2202.5  284
 1247326  285088  2.Materials  283
 1247327  285088  2139  284
 1247332  285085  2.Materials  283
 1247333  285085  2139  284
 1247338  285081  2.Materials  283
 1247339  285081  2408  284
 1247374  285134  2.Materials  283
 1247375  285134  2869  284
 1247458  286204  3.Travel  283
 1247459  286204  375  284

我希望输出如下

ProblemID  Type  Amount
 285135  2.Materials  2557.8
 285132  2.Materials  2889.1
 284848  2.Materials  2202.5
 285088  2.Materials  2139
 285085  2.Materials  2139
 285081  2.Materials  2408
 285134  2.Materials  2869
 286204  3.Travel 375

这就是我试过的

select ProblemID, Data as Type, (select data from table where paramid = paramid+1) as Amount from table where FieldID = 283

2 个答案:

答案 0 :(得分:0)

我觉得您在获取列data下的备用记录时遇到问题。我可以帮助你。

使用以下查询:

select ProblemID, 
case 
when MOD(ParamID, 2) = 0 then Data 
end as Type, 
case 
when MOD(ParamID, 2) = 1 then Data 
end as Amount  from table
group by ProblemID

我没有检查它的输出;但它将解决您在具有不同column_names的同一列下获取备用记录的问题。

如果您有任何小的显示问题,那么您必须在这里和那里进行调整:)

答案 1 :(得分:0)

SELECT ProblemID, Data AS Type,
       (SELECT Data
               FROM table AS t2
               WHERE (ProblemID = t1.ProblemID) AND (FIELDID = 284)) AS Amount
FROM            table AS t1
WHERE        (FIELDID = 283)
GROUP BY ProblemID, Data

在那里,纠正了