连接加上一个表

时间:2013-12-05 23:37:14

标签: c# sql-server-2008

我有一张桌子上有虫栏1,害虫2,害虫3,......,害虫12。下面的查询计算每列的总和 我为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和Father Name的表如果用户检查Person Name或FatherName,我将如何将两个表连接到同一个查询

2 个答案:

答案 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。