例如用户检查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和Father Name的表如果用户检查Person Name或FatherName,我将如何将两个表连接到同一个查询
答案 0 :(得分:1)
首先,尽量避免动态查询。
要获得结果,您可以将“已检查”值作为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。
答案 1 :(得分:0)
你想用人名和父亲姓名做什么?您是否根据用户可能为这些字段输入的条件过滤数据?
我正在通过下面的示例对您的功能做出一些假设。
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。