Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 连接加连接表_C#_Sql Server 2008 - Fatal编程技术网

C# 连接加连接表

C# 连接加连接表,c#,sql-server-2008,C#,Sql Server 2008,我有一个表,列为pest1,pest2,pest3,…,pest12。下面的查询计算每列的总和 我已经为c#中的每一列设置了复选框。我想要的是,无论用户选择哪个选项,查询都应该相应地运行 例如,对于用户检查,pest1和pest2查询应该如下所示 string sql = "SELECT "; if (checkBox1.Checked) sql += "SUM(pestpopulation1) as pestpopulation1, "; if (checkBox2.Checked) sql

我有一个表,列为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;";

我有另一个表,其中有人名和父名。如果用户检查人名或父名,我将如何将这两个表连接到同一个查询中。首先,请尽量避免动态查询

要获得结果,可以将“checked”值作为
参数传递

因此,假设有这样的表:

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。

首先,尝试避免动态查询

要获得结果,可以将“checked”值作为
参数传递

因此,假设有这样的表:

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。

您试图对人名和父亲名做什么?您是否根据用户可能为这些字段输入的条件筛选数据

下面的示例中,我对您的功能做了一些假设

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)
如果未选中“人名”复选框,则为@PersonName参数传入null,否则传入您的条件。父名复选框和@FatherName参数也是如此


我假设您正在尝试让用户选择性地按人名或父名(或两者)进行筛选。当然,您也可以在where子句中使用更宽松的条件,例如like运算符而不是equals。

您打算如何处理人名和父亲名?您是否根据用户可能为这些字段输入的条件筛选数据

下面的示例中,我对您的功能做了一些假设

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)
如果未选中“人名”复选框,则为@PersonName参数传入null,否则传入您的条件。父名复选框和@FatherName参数也是如此

我假设您正在尝试让用户选择性地按人名或父名(或两者)进行筛选。当然,您也可以在where子句中使用更宽松的条件,例如like运算符而不是equals