列が 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.
どんな助けでも大歓迎です。前もって感謝します!