1

次の状況があるとします。建物のある都市がいくつかあります。各都市は地区に分かれています。各地区には「メインハウス」(地区ごとに1つ)が必要です。

私は(SQL Server 2005)対応する関連テーブルCITY_BUILDS (IDCITY, IDBUILD)
を持っています私はまた建物テーブルを持っていますBUILD (ID, DISTRICT, IS_MAIN, COLOR)

それで、市長が地区リストの最初の家の色で地区の「メインハウス」を塗り直すことにしたとしましょう(クレイジーなアイデアですが、とにかく)

各地区の都市で「本館」を選択し、最初の地区の家を検索し、その色をのぞき、本館をペイントする必要があります。

手順のスタブを開始しましたが、すぐに混乱してしまいました...

DECLARE L_CURSOR CURSOR FAST_FORWARD FOR
SELECT B.DISTRICT, B.IS_MAIN, B.ID 
FROM BUILD B 
    INNER JOIN CITY_BUILDS C_B 
        ON B.ID = C_B.IDBUILD                   
WHERE IDCITY = 142 --AND B.IS_MAIN=1
ORDER BY DISTRICT

PS。最初の建物とは、CITY_BUILDS リストで最初に出現したものを意味します...また、その「最初の」家は MainHouse 自体であってはなりません...

PPS。実際のプロジェクトでペア (ID_MAIN_HOUSE - ID_FIRST_HOUSE) を取得したら、その 2 つの引数と COLOR を使用してストアド プロシージャを呼び出す必要があるため、カーソルを使用しました...

4

1 に答える 1

1

メイン地区の IS_MAIN が 1 であると仮定すると、1 つの update ステートメントですべてを実行できると思います

UPDATE B
SET COLOR = M.COLOUR
FROM CITY_BUILDS C  -- get city
-- get main
INNER JOIN BUILD M ON M.ID = C.IDBUILD AND M.IS_MAIN =1
 -- get others join them to city and main district
INNER JOIN BUILD B ON C.ID = C.IDBUILD AND C.IS_MAIN <> 1 AND M.DISTRICT = B.DISTRICT 
-- if you really only need one city then uncomment following 
--WHERE C.IDCITY = 142
于 2012-09-25T09:40:38.237 に答える