0

データベースからレポートを作成しようとしています。

私は次のような2つのテーブルを持っています:

device          sensor
id  | name      id  | devid | value
====|=====      ====|=======|========
1   | dev1      1   |   1   | 1.1
2   | dev2      2   |   1   | 1.2
                3   |   2   | 2.1
                4   |   2   | 2.2

私はこれを返したい:

 id | name  | val_rc    | val_cf
====|=======|===========|==========
 1  | dev1  | 1.1       | 1.2
 2  | dev2  | 2.1       | 2.2

for ステートメントを使用して、すべての値をレポートに入れています。ヘッダー名は重要ではありません。

この SQL クエリのさまざまな順列を試しました。

SELECT device.id, device.name, sensor.value AS val_rc, sensor.value AS val_cf
FROM device
JOIN sensor
ON sensor.devid = device.id;
4

3 に答える 3

1

各列にどの値を入れるかを決定する方法について詳細を提供しなかったため、この例では次を使用しますrow_number

select id,
   name,
   max(case when GROUP_ROW_NUMBER = 1 then value end) as val_rc,
   max(case when GROUP_ROW_NUMBER = 2 then value end) as val_cf
from
(
  select d.id, devid, name, value, 
        @num := if(@NAME = `NAME`, @num + 1, 1) as group_row_number,
        @NAME := `NAME` as dummy
  FROM device d
  INNER JOIN sensor s
    ON s.devid = d.id
  order by name, value
) x
group by id, name

デモで SQL Fiddle を参照してください

于 2012-10-03T20:34:24.640 に答える
0

あなたがここに書いたことを見て、私が思いついたものは次のとおりです。

SELECT device.id, device.name,
(SELECT sensor.value FROM sensor WHERE sensor.devid = device.id AND sensor.senid = '1') AS val_rc, 
(SELECT sensor.value FROM sensor WHERE sensor.devid = device.id AND sensor.senid = '2') AS val_cf  
FROM device
于 2012-10-03T21:06:08.030 に答える
0

deviceでテーブルを 2 回結合する必要がありますsensor

の値をrcテーブルの最初の値とcf最後の値にする場合、次のクエリは次のようになります。

SELECT device.id, device.name, sensor1.value AS val_rc, sensor2.value AS val_cf
FROM device, sensor sensor1, sensor sensor2
    where sensor1.devid= device.id 
    and sensor1.id = (select min(id) from sensor s1 where s1.devid= sensor1.devid)
    and sensor2.devid= device.id 
    and sensor2.id = (select max(id) from sensor s2 where s2.devid= sensor2.devid)

あなたが尋ねたものを正確に与えます。

 id | name  | val_rc    | val_cf
====|=======|===========|==========
 1  | dev1  | 1.1       | 1.2
 2  | dev2  | 2.1       | 2.2
于 2012-10-03T20:47:31.303 に答える