【问题标题】:Dynamically generate SQL query based on selection in ASP.net在 ASP.net 中根据选择动态生成 SQL 查询
【发布时间】:2015-06-11 17:49:36
【问题描述】:

我有一张桌子 1:

和表 2:

每个问题可以有多个选择(例如:questionId 1 有两个选择,choiceId 1 和 2)。

我有一个允许用户选择多个选项的表单,如下所示:

还有一个答案表:

现在我的问题是:我想根据选择形成一个 SQL 查询并显示所选答案的数量。(例如:我想计算性别为女性和教育程度为 1 年级的答案)。我该怎么做?

我尝试过这样的事情:

select * from answers where (questId =2 and choiceIndex='2.0000') and (questId =3 and choiceIndex='1.0000') and someId=72

这个查询没有给我正确的计数,因为相同的选择索引可以存在于不同的选择。

我怎样才能做到这一点?用户还可以从表单中选择许多选项,那么有什么方法可以动态生成我的 SQL 查询?

开斋节

感谢@Marc Gravell 的解决方案。它有很大帮助。现在,一旦我实现了这一点,我想在我的查询中包含算术运算符。 (例如:我想计算性别为女性 + 教育为 1 年级 - 教育为 3 年级的答案)。

有没有一种方法可以在我的查询中包含算术运算符(+、-、*、/、%、count、average)?

场景:我设计了一个表单,用户将在其中从数据库值生成公式。 (例如:用户选择choice1[female] +choice2[grade 1] *choice3[grade3] 生成的公式将保存在数据库中以供进一步使用)

我试过这样:

 select ((select COUNT(*) from answers where (questId =2 and answer='1.0000') and someId=72) +
 (select COUNT(*) from answers where (questId =3 and answer='1.0000') and someId=72))

在此查询中,我尝试对两个选择语句执行添加操作。我可以用同样的方式做 *,/,percentage 等吗?

有没有更好的方法来做到这一点?

【问题讨论】:

  • 重新编辑;是的,数据库可以执行算术运算,但它需要数字输入 - 在您的“像这样”示例中,不清楚您的意思是确切
  • 在该查询中,我尝试添加 2 个选择查询的计数。同样,我想执行其他算术运算。有没有更好的方法来做到这一点?
  • 是的,它有效。只是想知道是否还有其他更好的方法可以做到这一点。
  • 不,看起来差不多;你也可以使用:select count(1) from (query 1) union [all] (query 2) union [all] (query 3),但是你所拥有的很好

标签: c# asp.net sql-server-2008


【解决方案1】:

choiceIndex永远不会同时成为2.00001.0000;因此,我假设您的意思是:

select * from answers where (
    (questId=2 and choiceIndex='2.0000') or
    (questId=3 and choiceIndex='1.0000')
) and someId=72

请注意,如果您正在基于输入值构建查询,您可能应该对其进行参数化,因此它最终为:

select * from answers where (
    (questId=@questId0 and choiceIndex=@choiceIndex0) or
    (questId=@questId1 and choiceIndex=@choiceIndex1)
) and someId=@someId

添加了带值的参数:

  • @questId0 => 2
  • @questId1 => 3
  • @choiceIndex0 => '2.0000'
  • @choiceIndex1 => '3.0000'
  • @someId => 72

【讨论】:

  • 感谢您的快速回复。它有很大帮助。我还有一个问题,我已经更新了我的问题。请看一看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2014-06-08
相关资源
最近更新 更多