-1

我在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价值。我需要检查原始表格中的 a pacienthave aCA > 5.5和 a P > 11(以及其他一堆东西)很难快速轻松地完成此操作。

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

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

4

1 回答 1

2

您没有提供有关放置在CA,PPTH列中的内容的许多详细信息,但是根据数据,它们看起来分别对应于1017,10184104。如果是这样,您也许可以使用带有CASE表达式的聚合函数将数据从行转换为列:

select orden,
  pacient,
  per,
  max(case when exam = 1017 then value else 0 end) `CA`,
  max(case when exam = 1018 then value else 0 end) `P`,
  max(case when exam = 4104 then value else 0 end) `PTH`,
  `condition`,
  date
from yt
group by orden, pacient, per, `condition`, date;

请参阅SQL Fiddle with Demo

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

于 2013-05-08T20:44:22.313 回答