0

列が State_Code、School_Code、および School_Type である SQL テーブルがあります。

サンプルデータ:

State_Code    School_Code     School_Type
 01            01014874        1
 01            01018790        2
 1             10189900        1
 1             10277689        1

*(注: School_Code の 1 桁目と 2 桁目は実際の州コードで、3 桁目と 4 桁目は特定の州の District_Code です)*

ここで、このクエリを起動すると:

Select COUNT(School_Code) from Table1 where State_Code='1'+0;

州内に存在する学校の数をコード「1」で返します。すなわち4 ;

しかし、州内に存在する学校の数を取得したい場合は、DISTRICT-WISE; このクエリを起動します。

Select State_Code,SUBSTRING(School_Code,3,2) AS District_Code,COUNT(School_Code) AS Number_of_Schools_In_District FROM Table1 GROUP BY State_Code+0;

このクエリは、次の出力を返します。

State_Code     District_Code      Number_of_Schools_In_District
   01               01                         2
   1                18                         1
   1                27                         1

しかし、正しい出力は次のとおりです。

State_Code     District_Code      Number_of_Schools_In_District
   01               01                         3
   1                02                         1

これは、School_Code 列の SQL テーブルにユーザーが入力した誤ったデータが原因です。状態 '1' と '01' は実際には同じ状態、つまり '01' です。しかし、3 行目と 4 行目の School-Code は '0' で始まっていないため、出力で正しくない動作が発生します。

したがって、この問題を解決するには、次のロジックを使用する必要があります。

*If number of characters in State_Code is 1 and School_Code does not start with '0', then a '0' should be prefixed to the School_Code value to get the correct District_Code value.*

私はこれを試しました:

Select State_Code,SUBSTRING(School_Code,3,2) AS District_Code,COUNT(School_Code) AS     Number_of_Schools_In_District FROM Table1 WHERE IF CHARACTER_LENGTH(State_Code)=1 AND School_Code NOT LIKE '0%' THEN REPLACE(School_Code,School_Code,CONCAT(0,School_Code)) END IF GROUP BY State_Code+0, SUBSTRING(School_Code,3,2)+0;

私の予想では、State_code のいずれかの値が 1 桁で、対応する学校コードが「0」で始まらない場合、これに「0」が追加され、3 桁目と 4 桁目の地区コードが計算されます。しかし、これは起こりません。それでもエラーが発生します。

Note: I don't want to update original SQL table values.

どんな助けでも大歓迎です。前もって感謝します!

4

1 に答える 1

0

以下のクエリを試してください

Select State_Code, IF(CHARACTER_LENGTH(State_Code)=1, SUBSTRING(School_Code,2,2), SUBSTRING(School_Code,3,2)) AS District_Code,COUNT(School_Code) AS     Number_of_Schools_In_District FROM Table1 WHERE GROUP BY State_Code+0, SUBSTRING(School_Code,3,2)+0;
于 2013-03-29T12:32:00.653 に答える