3

ticket_id's、、および値を持つテーブルがfield_id'sあります。例えば。

ticket_idfield_id値
10011ピーター
10021デイブ
1001 2 555-2565
1002 2 554-2548

目標は、同じテーブル内の値を水平方向に表示するクエリを作成しようとしていることです。例えば。

Ticket_ID Field1 Field2
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

ここに 1 つのオプションがあります。数が多いと性能はわかりません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 に答える