C# 下面是一些想法。谢谢,很抱歉我的问题让人困惑。我的主要疑问是(mark+=)是否等于“totalMark”,我尝试了你的方法,但我没有得到“如果用户选择10,那么从你的表中选择前5名,其中分数为2或分数为4”的部分,因为结果将超过10,如果你的意思是“如果
C# 下面是一些想法。谢谢,很抱歉我的问题让人困惑。我的主要疑问是(mark+=)是否等于“totalMark”,我尝试了你的方法,但我没有得到“如果用户选择10,那么从你的表中选择前5名,其中分数为2或分数为4”的部分,因为结果将超过10,如果你的意思是“如果,c#,asp.net,sql-server,C#,Asp.net,Sql Server,下面是一些想法。谢谢,很抱歉我的问题让人困惑。我的主要疑问是(mark+=)是否等于“totalMark”,我尝试了你的方法,但我没有得到“如果用户选择10,那么从你的表中选择前5名,其中分数为2或分数为4”的部分,因为结果将超过10,如果你的意思是“如果用户选择10,那么从你的表中选择前5名,其中分数为2”,我不理解。它可以工作,但是,它只会显示5Q的分数=2,我想要一些不受限制的东西,比如点击2Q的分数=5,点击另一个q的分数=5,两个分数=2,一个分数=1,等等。首先,非常感谢你的帮助,我
下面是一些想法。谢谢,很抱歉我的问题让人困惑。我的主要疑问是(mark+=)是否等于“totalMark”,我尝试了你的方法,但我没有得到“如果用户选择10,那么从你的表中选择前5名,其中分数为2或分数为4”的部分,因为结果将超过10,如果你的意思是“如果用户选择10,那么从你的表中选择前5名,其中分数为2”,我不理解。它可以工作,但是,它只会显示5Q的分数=2,我想要一些不受限制的东西,比如点击2Q的分数=5,点击另一个q的分数=5,两个分数=2,一个分数=1,等等。首先,非常感谢你的帮助,我尝试了这个“选择不同的主题,级别,难度,问题,和(分数)从addquestion中,主语为“+sudjectID.SelectedValue+”,级别为“+level.SelectedValue+”,难度为“+dif.SelectedValue+”,按主语、级别、难度分组,问题的总和(标记)=“+total.SelectedValue+”按新ID排序();“``”但它给了我“如果指定了select DISTINCT,则ORDER BY items必须出现在选择列表中。”因此,我暂时删除了ORDER BY NEWID(),然后重试。但它什么也不显示,没有错误但没有结果,当我删除DISTINCT时,它只显示重复的记录。那么问题出在哪里呢。。对于//这里有一个代码示例(未经测试,仅用于演示),哇,这让我明白了我的代码有多么愚蠢:D,我试过你的,它更简单、更有效,但仍然有按错误排序,这一次有或没有DISTINCT,它只显示重复的行。我在另一个没有重复行的表上尝试了它,但结果一无所获。真的很感谢你让事情看起来simpler@Lojain如果您可以提供表中的示例数据(addquestion),它将帮助我调试它并给您一个答案。但是,您始终可以直接(在代码之外)查询表并检查结果,然后将结果与应用程序结果进行匹配。如果不匹配,则您必须处理代码以修复它。@Lojain如果您使用的是try/catch块,请确保您的catch块不是空的,使其返回异常错误以便能够跟踪它。如果更简单,请在此链接到表[link],如果不方便,请告诉我编辑我的问题并放一张图片。对于(您总是可以直接(在代码之外)查询表并检查结果),您的意思是使用sql数据库管理器吗?因为我正在处理来自vs的db,但如果它有帮助,我会下载它
[level] INT
[subjectId] VARCHAR
[subjectname] VARCHAR
[question] VARCHAR
[answer] VARCHAR
[difficulty] CHAR
[mark] INT
SELECT columns, aggratiotion functions (e.g. SUM, COUNT ..etc)
FROM tableName
WHERE
column = value
GROUP BY columns
HAVING
(aggratiotion functions) = value
SELECT
subjectId
, level
, difficulty
, question
, SUM(mark)
FROM
addquestion
WHERE
subjectId = somevalue
AND level = somevalue
AND difficulty = somevalue
GROUP BY
subjectId
, level
, difficulty
, question
HAVING
SUM(mark) = somevalue
"SELECT DISTINCT subjectId, level, difficulty, question, SUM(mark) FROM addquestion WHERE subjectId = '" + sudjectID.SelectedValue + "' AND level = " + level.SelectedValue + " AND difficulty = '" + dif.SelectedValue + "' GROUP BY subjectId, level, difficulty, question HAVING SUM(mark) = " + total.SelectedValue + " ORDER BY NEWID()";
string query = string.Empty;
string[] difficulties = {"easy", "medium", "hard"};
if(!difficulties.Contains(dif.SelectedValue))
{
query = string.Format("SELECT DISTINCT subjectId, level, difficulty, question, SUM(mark) FROM addquestion WHERE subjectId = '{0}' AND level = {1} GROUP BY subjectId, level, question HAVING SUM(mark) = {2} ORDER BY NEWID()", sudjectID.SelectedValue, level.SelectedValue, total.SelectedValue);
}
else
{
query = string.Format("SELECT DISTINCT subjectId, level, difficulty, question, SUM(mark) FROM addquestion WHERE subjectId = '{0}' AND level = {1} AND difficulty = '{2}' GROUP BY subjectId, level, difficulty, question HAVING SUM(mark) = {3} ORDER BY NEWID()", sudjectID.SelectedValue, level.SelectedValue, dif.SelectedValue, total.SelectedValue);
}
var dataTable = new DataTable();
using(SqlConnection con = new SqlConnection(ConnectionString))
using(SqlCommand command = new SqlCommand(query, con))
using(SqlDataAdapter adapter = new SqlDataAdapter(command))
{
con.Open();
adapter.Fill(dataTable);
}
GridView1.DataSource = dataTable;
GridView1.DataBind();
if (!difficulties.Contains(dif.SelectedValue.ToLower()))
{
query = string.Format("SELECT subjectId, level, difficulty, question FROM (SELECT *, SUM(mark) OVER(PARTITION BY subjectId ORDER BY subjectId ROWS UNBOUNDED PRECEDING) TotalMark FROM addquestion) d WHERE subjectId = '{0}' AND level = {1} AND TotalMark <= {2}", sudjectID.SelectedValue.ToString().Trim().ToLower(), level.SelectedValue, total.SelectedValue);
}
else
{
query = string.Format("SELECT subjectId, level, difficulty, question FROM (SELECT *, SUM(mark) OVER(PARTITION BY subjectId, difficulty ORDER BY subjectId ROWS UNBOUNDED PRECEDING) TotalMark FROM addquestion) d WHERE subjectId = '{0}' AND level = {1} AND TotalMark <= {2} AND difficulty = '{3}'", sudjectID.SelectedValue.ToString().Trim().ToLower(), level.SelectedValue,total.SelectedValue, dif.SelectedValue.ToString().Trim().ToLower());
}