0

最大半径を指定して 2 点間の距離を計算する関数を作成しました。関数は機能しますが、実装した方法で 2 回呼び出す必要があります。

selectブロックで1回、次にwhereブロックでもう一度。

これを達成するためのより良い方法はありますか?

助けてくれてありがとう!

select
    c.LABEL_NAME,
    k.*,
    dbo.kiw_GetNearMeetingLocationInMiles_FUNC(41.056466,-85.3312009,LATITUDE,LONGITUDE) as distance
    from USR_KIW_CUS_MEETING as k
    join CUSTOMER as c
    on c.MASTER_CUSTOMER_ID = k.MASTER_CUSTOMER_ID
    where c.USR_MEMBERSHIP_STATUS_CODE NOT IN('CR','CSD')
    and dbo.kiw_GetNearMeetingLocationInMiles_FUNC(41.056466,-85.3312009,LATITUDE,LONGITUDE)  <= 120;

アップデート

これは、Mathieu Rodic からの提案に基づいて機能します

SELECT
    *
FROM
(
    SELECT
        c.LABEL_NAME,
        k.*,
        dbo.kiw_GetNearMeetingLocationInMiles_FUNC(41.056466,-85.3312009,LATITUDE,LONGITUDE) as distance
    FROM
        USR_KIW_CUS_MEETING as k
    JOIN
        CUSTOMER as c on c.MASTER_CUSTOMER_ID = k.MASTER_CUSTOMER_ID
    WHERE
        c.USR_MEMBERSHIP_STATUS_CODE NOT IN('CR','CSD')
)a
WHERE
   a.distance <= 120
4

1 に答える 1

1

次のことを試してください。

SELECT
    *
FROM
(
    SELECT
        c.LABEL_NAME,
        k.*,
        dbo.kiw_GetNearMeetingLocationInMiles_FUNC(41.056466,-85.3312009,LATITUDE,LONGITUDE) as distance
    FROM
        USR_KIW_CUS_MEETING as k
    JOIN
        CUSTOMER as c on c.MASTER_CUSTOMER_ID = k.MASTER_CUSTOMER_ID
    WHERE
        c.USR_MEMBERSHIP_STATUS_CODE NOT IN('CR','CSD')
) AS computed_table
WHERE
    distance <= 120

このHAVING句により、計算列によるフィルタリングが可能になります。

于 2013-06-27T00:36:27.067 に答える