0

私が達成しようとしていることに似たトピックが他にもいくつかあることは知っていますが、私はこれに苦労しています。複数のテーブルからかなり複雑なクエリを使用して、1つの列に対して個別のSQLクエリ結果を取得できる必要がありますが、他の列に対しては取得できない必要があります。

これは現在のクエリです:

select llattrdata.ID dataid,

max(case when llattrdata.ATTRID = 2 then llattrdata.VALSTR end) TED_ID

from llattrdata, dtree 

where
llattrdata.DEFID = 19400074 and
llattrdata.VERNUM = dtree.VERSIONNUM and
llattrdata.ID = dtree.DATAID

group by llattrdata.ID

現在の結果:
DATAID TED_ID
19400078 10083
19400943 10083
19400941 10335

望ましい結果:
DATAID TED_ID
19400078 10083
19400941 10335

誰かが私を助けることができますか?おそらく何らかの結合が含まれていることは知っていますが、この場合の進め方は完全にはわかりません。

4

3 に答える 3

2
SELECT MIN(dataid) dataid, TED_ID
FROM
(
    SELECT
        llattrdata.ID dataid,
        MAX(CASE WHEN llattrdata.ATTRID = 2 THEN llattrdata.VALSTR END) TED_ID
    FROM llattrdata
    JOIN dtree ON llattrdata.ID = dtree.DATAID
    WHERE llattrdata.DEFID = 19400074
    AND llattrdata.VERNUM = dtree.VERSIONNUM
    GROUP BY llattrdata.ID
) T1
GROUP BY TED_ID
于 2012-04-27T20:54:48.367 に答える
0

MAX()関数を2番目ではなく最初のSELECT項目に割り当ててみてください。

于 2012-04-27T20:56:44.923 に答える
0

最初の列にどちらの値を選択してもかまわない場合は、2番目の列でグループ化し、最初の列でmin()またはmax()を使用してみてください。このようなグループ関数をネストできるかどうかはわかりませんが、dbに依存します(ビューなどを使用できます)

于 2012-04-27T21:04:56.840 に答える