3

我有一个表,我有一个ticket_id's,field_id's和值。例如。

ticket_id field_id 值
1001 1 彼得
第1002章 1个
1001 2 555-2565
1002 2 554-2548

目标是我正在尝试编写一个查询,该查询将在同一个表中水平显示值。例如。

Ticket_ID 字段 1 字段 2
1001 彼得 555-2565
1002 戴夫 554-2548

有很多field_ids。我尝试过使用,rownumber()但它没有用。

有任何想法吗?

4

4 回答 4

2
Select Temp_field1.ticket_id,Field1,Field2
From
    (Select ticket_id,value as Field1 from table where field_id = 1) as Temp_field1,
    (Select ticket_id,value as Field2 from table where field_id = 2) as Temp_field2
Where Temp_field1.ticket_id = Temp_field2.ticket_id;
于 2012-08-22T07:01:48.483 回答
1
SELECT TICKET_ID, MAX(FIELD_1),MAX(FIELD_2)
FROM (
    SELECT TICKET_ID, 
        CASE field_id
            WHEN 1 THEN VALUE
            ELSE NULL end AS FIELD_1,
        CASE field_id
            WHEN 2 THEN VALUE
            ELSE NULL end AS FIELD_2
)
GROUP BY FIELD_1,FIELD_2

这有点古怪,但我试图最小化选择。我们的想法是在我们不需要该值时设置 null 并且当我们执行 MAX 时,它将采用不为 null 的值(MAX 适用于 VARCHAR)

于 2012-08-22T07:08:55.843 回答
0

这个答案之前已经给出了。你可以在这里查看。

MySQL 数据透视表

基本上你必须在你的 field_id 上旋转一个“组”(或一个不同的)选择。

于 2012-08-22T07:13:16.773 回答
0

这是一种选择。不知道如果有很多性能field_ids

SELECT t1.`ticket_id` AS Ticket_ID, t1.`value` AS Field1, t2.`value` AS Field2 FROM `ticket` t1
  LEFT JOIN `ticket` t2 ON t1.`ticket_id` = t2.`ticket_id`
  WHERE t1.`value` != t2.`value`
  GROUP BY t1.`ticket_id`
于 2012-08-22T07:36:28.510 回答