15

添付の画像で見ることができる2つのテーブルがあります。

表Aには、部門、および平均が含まれています。

表Bには、 MonthYearRangeStartRangeEnd、およびColorが含まれています。

表Bのスクリーンショットを見ると、毎月、緑、黄、オレンジ、赤の値があることがわかります。範囲もあります。

必要なもの.........

テーブルAに「Colour」という名前の新しい列が必要です。この列では、緑、黄、オレンジ、または赤のいずれかが必要です。月に色が割り当てられる決定要因は、「平均」列になります。

例えば:

5月の平均のDepartmentAは次のようになります。表B0.96 を参照すると、 8行目がこれに適合する範囲であることがわかります。したがって、赤はメイズ平均の隣の表Aに配置したい色です。0.75+

RangeEndは、基本的に、ここのスロット75+よりも大きいものであるため、1か月あたりの最高範囲をNULLとして残しました。0.75

誰かが私を正しい方向に向けることができますか?それはそれほど時間のかかることではありません。

ここに画像の説明を入力してください

4

3 に答える 3

23

あなたはそれを簡単に使うことができます:

select *
from table a
    join table b
        on a.month = b.month
           and a.average between b.rangestart and isnull(b.rangeend,10000) -- 100000 = greater than max value
于 2012-09-26T14:40:45.773 に答える
3

だから本当にあなたが欲しい

select a.*,b.colour from a 
left join table b on a.month=b.month 
 and ((b.rangeend is null and a.average>b.rangestart) 
    or (a.average between b.rangestart and b.rangeend))

いくつかのテーブルとデータを入力する時間がなかったので、それが機能することを約束していません

于 2012-09-26T14:39:48.160 に答える
0

新しい列を TableA に追加してから、テーブル B の値で更新する場合、これが最終的な更新です。

UPDATE TableA
SET Colour = B.Colour
FROM TableA A
INNER JOIN TableB B ON B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)

特定の月のテーブル B にデータがなく、テーブル A に平均データがない可能性がある場合は、LEFT OUTER JOIN を使用してデフォルト値を指定する必要があります。

UPDATE TableA
SET Colour = ISNULL(B.Colour, N'SomeColour')
FROM TableA A
LEFT OUTER JOIN TableB B ON B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)

また、テーブル A で発生しているように、テーブル B のデータが年に依存するかどうかを確認する必要があります。

この場合、このフィールドを Join の On 句に追加する必要があります。

UPDATE TableA
SET Colour = B.Colour
FROM TableA A
INNER JOIN TableB B ON B.Year = A.Year AND B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)

更新を実行する前に、最初に次のクエリを実行して、目的の値が得られていることを確認できます。

SELECT Department, A.Month, Average, B.Colour
FROM @tableA A
INNER JOIN @tableB B ON B.Month = A.Month AND B.RangeStart < A.Average AND (B.RangeEnd IS NULL OR B.RangeEnd > A.Average)

お役に立てれば :)

于 2012-09-26T14:54:11.590 に答える