我有一个包含列pest1、pest2、pest3、....、pest12的表。下面的查询计算我为c#中的每一列创建的复选框的每一列的总和。我想要的是用户选择的选项,查询应该相应地运行。
例如,对于用户检查,pest1和pest2查询应如下所示
string sql = "SELECT ";
if (checkBox1.Checked) sql += "SUM(pestpopulation1) as pestpopulation1, ";
if (checkBox2.Checked) sql += "SUM(pestpopulation2) as pestpopulation2, ";
sql += "'' as dummy";
sql += " FROM transformed_table;";我有另一个表,其中包含Person Name和Person,如果用户检查Person Name或FatherName,我如何将这两个表连接到同一查询中
发布于 2013-12-06 08:09:51
首先,尽量避免动态查询。
要获得结果,可以将"checked“值作为BIT参数传递。
因此,假设有这样的表:
CREATE TABLE T (
P1 int,
P2 int,
P3 int
)使用参数化查询,如果选中/取消选中相应的复选框,则传递0/1:
SELECT
CASE @par1 WHEN 1 THEN SUM(P1) ELSE 0 END P1Sum,
CASE @par2 WHEN 1 THEN SUM(P2) ELSE 0 END P2Sum,
CASE @par3 WHEN 1 THEN SUM(P3) ELSE 0 END P3Sum返回的结果总是完整的一行,其中未请求的总和被设置为0。
发布于 2013-12-06 11:19:45
你想用人名和父亲的名字做什么?您是否根据用户可能在这些字段中输入的条件来筛选数据?
我用下面的例子对你的功能做了一些假设。
select ....
from transformed_table tt
left outer join other_table ot on
(@PersonName is not null or @FatherName is not null)
and tt.key = ot.key
where
(@PersonName is null or ot.PersonName = @PersonName)
and (@FatherName is null or ot.FatherName = @FatherName)如果未选中Person Name复选框,则为@PersonName参数传递null,否则传递您的标准。父名复选框和@FatherName参数也是如此。
我假设您正在尝试让用户有选择地按人名或父亲姓名(或两者)进行过滤。当然,您也可以在where子句中使用更宽松的条件,例如like操作符而不是equals。
https://stackoverflow.com/questions/20413088
复制相似问题