在mysql中使用三列转置行

时间:2013-05-08 20:36:40

标签: php mysql database

我在mysql中有这个表:

id | orden         | pacient  | per| exam  | value | condition  | date
---+---------------+----------+----+-------+-------+------------+--------------------
1  | 201208082001  | 20652598 | 0  | 1017  | 9.00  | 0          | 2012-08-08 09:28:21
2  | 201208082001  | 20652598 | 0  | 1018  | 4.80  | 0          | 2012-08-08 09:28:21
3  | 201208082001  | 20652598 | 0  | 4104  | 213.00| 0          | 2012-08-08 09:28:21
4  | 201208082002  | 2799592  | 0  | 1017  | 7.70  | 0          | 2012-08-08 09:29:21
5  | 201208082002  | 2799592  | 0  | 1018  | 2.40  | 0          | 2012-08-08 09:29:21
6  | 201208082002  | 2799592  | 0  | 4104  | 43.00 | 0          | 2012-08-08 09:29:21
7  | 201208082003  | 6058327  | 0  | 1017  | 9.10  | 0          | 2012-08-08 09:30:02
8  | 201208082003  | 6058327  | 0  | 1018  | 4.00  | 0          | 2012-08-08 09:30:02
9  | 201208082003  | 6058327  | 0  | 4104  | 840.00| 0          | 2012-08-08 09:30:02

我需要的是:三行中的每个具有相同的orden相同的pacient和不同的examsvalues。始终有CA值,P值和PTH值。我需要检查pacient哪里有CA > 5.5P > 11(以及其他一些东西)在表的原始形式中很难快速轻松地进行检查。< / p>

id | orden         | pacient  | per| CA    | P    | PTH    | condition | date
---+---------------+----------+----+-------+------+------- +-----------+--------------------
1  | 201208082001  | 20652598 | 0  | 9.00  | 4.80 | 213.00 |  0        | 2012-08-08 09:28:21
2  | 201208082002  | 2799592  | 0  | 7.70  | 2.40 | 43.00  |  0        | 2012-08-08 09:28:21
3  | 201208082003  | 6058327  | 0  | 9.10  | 4.00 | 840.00 |  0        | 2012-08-08 09:28:21

这个转置表将在视图中,我尝试过子查询,但速度非常慢,所以。我希望你能帮助我。

1 个答案:

答案 0 :(得分:2)

您没有提供有关CAPPTH列中的内容的详细信息,但根据数据显示它们与{{1}相对应分别是},10171018。如果是这样,您可以使用带有4104表达式的聚合函数将数据从行转换为列:

CASE

请参阅SQL Fiddle with Demo

此版本不使用任何子查询来获取结果。