3

私はこの問題を何時間も解決することができません。
これは私のテーブルです

t1:

–––––––––––––––––––––––––––––––––––
| id | text   |  lang | transl_id |
–––––––––––––––––––––––––––––––––––
| 1  | first  |  en   |  222      |
–––––––––––––––––––––––––––––––––––
| 2  | second |  de   |  222      |
–––––––––––––––––––––––––––––––––––
| 3  |   jkj  |  de   |  234      |
–––––––––––––––––––––––––––––––––––
| 4  |  89080 |  de   |  235      |
–––––––––––––––––––––––––––––––––––

これが私の質問です:

SELECT
    transl_id AS property,
    (SELECT text FROM t1 WHERE lang='en') AS value1,
    (SELECT text FROM t1 WHERE lang='de') AS value2,

FROM t1

次の表を返します。

–––––––––––––––––––––––––––––––––––
| property  |  value1  |  value2  |
–––––––––––––––––––––––––––––––––––
|    222    |  first   |          |
–––––––––––––––––––––––––––––––––––
|    222    |          |  second  |
–––––––––––––––––––––––––––––––––––
|    234    |  jkj     |          |
–––––––––––––––––––––––––––––––––––
|    235    |  89080   |          |
–––––––––––––––––––––––––––––––––––

各行には、またはのいずれvalue1value2があり、両方はありません。propertyフィールドの値が等しい行が1つの行になるように結果をグループ化する方法はありますか?私はこのようなものを意味します:

–––––––––––––––––––––––––––––––––––
| property  |  value1  |  value2  |
–––––––––––––––––––––––––––––––––––
|    222    |  first   |  second  |
–––––––––––––––––––––––––––––––––––
...
4

2 に答える 2

3

このクエリを試してください:

SELECT
    property,
    max(value1) as Value1,
    max(value2) as Value2
FROM 
(
SELECT transl_id AS property,
    CASE when lang = 'en' then text else null end as value1,
    CASE when lang = 'de' then text else null end as value2
FROM t1
) t
GROUP BY property

このSQLFiddleを参照してください

テーブルにさらに値を追加しようとしましたが、このSQLFiddleで目的の結果が得られました。

于 2012-09-08T13:57:00.043 に答える
0

多分このようなもの:

select t1.property, t1.value1, t2.value2 from
( select property, value1 from table1 where value1 is not null ) t1,
( select property, value2 from table1 where value2 is not null ) t2
where t1.property = t2.property
于 2012-09-08T13:16:25.637 に答える