首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接外加连接表

连接外加连接表
EN

Stack Overflow用户
提问于 2013-12-06 07:37:14
回答 2查看 48关注 0票数 1

我有一个包含列pest1、pest2、pest3、....、pest12的表。下面的查询计算我为c#中的每一列创建的复选框的每一列的总和。我想要的是用户选择的选项,查询应该相应地运行。

例如,对于用户检查,pest1和pest2查询应如下所示

代码语言:javascript
复制
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,我如何将这两个表连接到同一查询中

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 08:09:51

首先,尽量避免动态查询。

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

因此,假设有这样的表:

代码语言:javascript
复制
CREATE TABLE T (
P1 int,
P2 int,
P3 int
)

使用参数化查询,如果选中/取消选中相应的复选框,则传递0/1:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-12-06 11:19:45

你想用人名和父亲的名字做什么?您是否根据用户可能在这些字段中输入的条件来筛选数据?

我用下面的例子对你的功能做了一些假设。

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20413088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档