0

グループ (MIN 関数) から最小値を取得するだけでなく、関連する ID も取得する必要があります。

SELECT
    pv.id,
    MIN(pv.auto)+MIN(a.autonomia) as autonomia,
    -->> a.id as minid
from @autonomie a
join VARDB v on a.id=v.IDARTICO
join RIDIBA r on v.id=r.IDVARDB and r.idartico IS NOT NULL
join @PvTable pv on pv.id=r.IDARTICO
group by pv.id

ここでは、選択したフィールドを で計算autonomiaMIN(a.autonomia)ますが、最も低いフィールドに関連付けられた id (a.id フィールド) も選択したいと思いa.autonomiaます。

4

4 に答える 4

0

要件を完全に理解しているかどうかはわかりませんが、サブクエリを試してみてください:

SELECT
    ,pv.id
    ,(MIN(pv.auto) + autonomie_min.autonomia) as autonomia
    ,autonomie_min.id as autonomia_id
from 
  VARDB v
    JOIN
    (
        SELECT
            a.id
            ,MIN(a.autonomia) as autonomia
        FROM
            @autonomie a
        GROUP BY
            a.id
    ) AS autonomie_min ON
        (autonomie_min.id = v.IDARTICO)
    JOIN
    RIDIBA r ON
        (r.IDVARDB = v.id) AND
        (r.idartico IS NOT NULL)
    JOIN
    @PvTable pv ON
        (pv.id = r.IDARTICO)
GROUP BY
    pv.id

サブクエリ *autonomie_min* は、各 ID に関連付けられた自律性のすべての最小値を含むテーブルを生成します。

于 2013-02-07T14:22:19.623 に答える
0

これで試すことができます:

SELECT  pv.id
        , ROW_NUMBER() OVER (PARTITION BY pv.id ORDER BY pv.auto) pv_auto
        , ROW_NUMBER() OVER (PARTITION BY pv.id ORDER BY a.autonomia) a_autonomia
        , a.id a_id
        , pv.auto
        , a.autonomia
INTO    #temp
FROM    @autonomie a
JOIN    VARDB v ON a.id=v.IDARTICO
JOIN    RIDIBA r ON v.id=r.IDVARDB and r.idartico IS NOT NULL
JOIN    @PvTable pv ON pv.id=r.IDARTICO

SELECT  temp_pv_auto.id
        , temp_pv_auto.auto + temp_a_autonomia.autonomia AS autonomia
        , temp_a_autonomia.a_id
FROM    #temp temp_pv_auto
JOIN    #temp temp_a_autonomia ON 
        temp_pv_auto.id = temp_a_autonomia.id
AND     temp_pv_auto.pv_auto = 1 
AND     temp_a_autonomia.a_autonomia = 1

次のクエリを試すこともできます。

SELECT  pv.id
        , MIN(pv.auto) pv_auto_min
        , MIN(a.autonomia) a_autonomia_min
INTO    #temp
FROM    @autonomie a
JOIN    VARDB v ON a.id=v.IDARTICO
JOIN    RIDIBA r ON v.id=r.IDVARDB and r.idartico IS NOT NULL
JOIN    @PvTable pv ON pv.id=r.IDARTICO
GROUP BY
        pv.id


SELECT  pv.id
        , #temp.pv_auto_min + #temp.a_autonomia_min AS autonomia
        , a.id a_id
FROM    @autonomie a
JOIN    VARDB v ON a.id=v.IDARTICO
JOIN    RIDIBA r ON v.id=r.IDVARDB and r.idartico IS NOT NULL
JOIN    @PvTable pv ON pv.id=r.IDARTICO
JOIN    #temp ON 
        #temp.id = pv.id
AND     #temp.a_autonomia_min = a.autonomia
于 2013-02-07T09:31:47.053 に答える
0
SELECT  pv.id,
    MIN(pv.auto)+MIN(a.autonomia) as autonomia,
    (
        SELECT a2.id from @autonomie a2
            join VARDB v2 on a2.id=v2.IDARTICO
            join RIDIBA r2 on v2.id=r2.IDVARDB and r2.idartico IS NOT NULL
            join @PvTable pv2 on pv2.id=r2.IDARTICO 
        where a2.autonomia = MIN(a.autonomia)
    )
    -->> a.id as minid
from @autonomie a
join VARDB v on a.id=v.IDARTICO
join RIDIBA r on v.id=r.IDVARDB and r.idartico IS NOT NULL
join @PvTable pv on pv.id=r.IDARTICO
group by pv.id

サブクエリのすべての条件を反映するように更新されました。

于 2013-02-07T10:14:23.790 に答える
-1

値をグループ化した後、結果セットを並べ替えて、結果セットから上位 1 つを取得できます。

SELECT TOP 1
pv.id,
MIN(pv.auto)+MIN(a.autonomia) as autonomia,
-->> a.id as minid
from @autonomie a
join VARDB v on a.id=v.IDARTICO
join RIDIBA r on v.id=r.IDVARDB and r.idartico IS NOT NULL
join @PvTable pv on pv.id=r.IDARTICO
group by pv.id
ORDER BY autonomia
于 2013-02-07T09:23:28.290 に答える