SQLite是否支持CASE WHEN查询?

时间:2020-05-18 16:46:59

标签: c# sqlite

我打算根据参加者的等级给积分。例如,位置1应该给32点,位置2应该给31点,位置3应该给30点,依此类推... 结果没有来。对于任何位置,它仅返回“ 1”。查询可能出什么问题? 注意:该查询在SQLExpress上运行良好,但是当我在SQLite中使用该查询时,对于参与者的所有位置它只会返回1。 这是我的SQLiteCommand查询:

cn.Open();
SQLiteCommand cmd3 = new SQLiteCommand("INSERT INTO PARTICIPANT5(NAMES,SCHOOL,TYPE,TITLE,YEAR,TOTAL,POSITION,POINTS) SELECT  DISTINCT NAMES,SCHOOL,TYPE,TITLE ,YEAR,SUM(AVG) AS TOTAL, RANK()OVER (ORDER BY SUM(AVG) DESC) AS POSITION , CASE WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='1' THEN '32' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='2' THEN '31' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='3' THEN '30' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='4' THEN '29' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='5' THEN '28' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='6' THEN '27' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='7' THEN '26' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='8' THEN '25' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='9' THEN '24'  WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='10' THEN '23' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='11' THEN '22' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='12' THEN '21'  WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='13' THEN '20' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='14' THEN '19' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='15' THEN '18'  WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='16' THEN '17' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='17' THEN '16' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='18' THEN '15' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='19' THEN '14' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='20' THEN '13' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='21' THEN '12'  WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='22' THEN '11' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='23' THEN '10' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='24' THEN '9' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='25' THEN '8' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='26' THEN '7' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='27' THEN '6' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='28' THEN '5' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='29' THEN '4' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='30' THEN '3' WHEN RANK()OVER (ORDER BY SUM(AVG) DESC)='31' THEN '2' ELSE '1' END POINTS FROM Average WHERE YEAR='" + textBox15.Text + "' AND CATEGORY = '" + textBox1.Text + "' GROUP BY NAMES,SCHOOL,TYPE,TITLE,YEAR  ", cn);
int count3 = cmd3.ExecuteNonQuery();
cn.Close();

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了问题所在。现在它就像一种魅力! SQLite无法理解查询中的单引号... 我只是删除了所有单引号。这就是它的样子。 尝试 { cn.Open(); SQLiteCommand cmd3 =新的SQLiteCommand(“ INSERT INTO PARTICIPANT5(NAME,SCHOOL,TYPE,TITLE,YEAR,TOTAL,POSITION,POINTS)选择不同的名称,SCHOOL,TYPE,TITLE,YEAR,SUM(AVG)作为TOTAL,RANK()OVER (按SUM(AVG)DESC排序),当RANK()超过(按SUM(AVG)DESC排序)= 1则为32,当RANK()超过(按SUM(AVG)DESC排序)为2,则为31时RANK()OVER(按SUM(AVG)DESC排序)= 3,则30则RANK()OVER(按SUM(AVG)DESC排序)= 4,然后,RANK()OVER(按SUM(AVG)DESC排序)= 29 5 THEN 28当RANK()超过(按SUM(AVG)DESC排序)= 6 THEN 27 WHEN RANK()超过(按SUM(AVG)DESC排序)= 7 THEN 26当RANK()超过(按SUM(AVG)DESC排序)= 7 )DESC)= 8然后RANK()OVER(按SUM(AVG)DESC排序)时25然后THER 24当RANK()OVER(按SUM(AVG)DESC排序)= 10然后THEN 23当RANK()OVER(按ORDER命令)按SUM(AVG)DESC)= 11则22 RANK()超过(按SUM(AVG)DESC的顺序)= 12 THEN 21当RANK()OVER(按SUM(AVG)DESC的顺序)= 13那么20 RANK() )OVER(按SUM(AVG)DESC排序)= 14然后在RANK()OVER(按SUM(AVG)DESC排序)= 19时15 THEN 18当RANK()超过(按SUM(AVG)DESC命令)= 16 THEN 17 WHEN RANK()超过(按SUM(AVG)DESC命令)= 17 THEN 16当RANK()超过(按SUM(AVG)DESC命令)= 17 )DESC)= 18然后15(当RANK()超过(按SUM(AVG)DESC排序))= 19 THEN 14当RANK()超过(按SUM(AVG)DESC排序)= 20 THEN 13当RANK()超过(ORDER(排序)按SUM(AVG)DESC)= 21然后在RANK()超过时排序(按SUM(AVG)DESC排序)= 22 THEN 11当RANK()超过(按SUM(AVG)DESC排序)时= 23然后则当RANK()排序时)OVER(按SUM(AVG)DESC排序)= 24 THEN RANK()OVER(按SUM(AVG)DESC排序)= 25 THEN 9当RANK()OVER(按SUM(AVG)DESC排序)= 26 THEN 7当RANK()超过(按SUM(AVG)DESC排序)= 27然后6当RANK()超过(按SUM(AVG)DESC排序)= 28然后5当RANK()超过(按SUM(AVG)DESC排序) )= 29则当RANK()超过(按SUM(AVG)DESC排序)时= 4 THEN 3则当RANK()超过(按SUM(AVG)DESC排序)的THEN 3 =然后THEN 2 ELSE 1结束点从平均年份= '“ + textBox15.Text +”'AND CATEGORY ='“ + textBox1.Text +”'GROUP BY NAMES,SCHOOL,TYPE,TITLE,YEAR“,cn); int count3 = cmd3.ExecuteNonQuery(); cn.Close();

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
相关问题