Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
在SQL中只有一列为真时,如何查找计数?_Sql - Fatal编程技术网

在SQL中只有一列为真时,如何查找计数?

在SQL中只有一列为真时,如何查找计数?,sql,Sql,我有一张桌子 类别1 类别2 平面图 计划 普朗克 2020-12-10 假的 1. 0 1. 2020-12-10 真的 1. 0 0 2020-12-11 假的 0 1. 0 2020-12-11 真的 1. 1. 0 您可以使用: 选择COUNT(*)作为cnt 从你的桌子上 其中,planA=1,planB=0,planC=0; 这可能与不使用动态SQL就可以在这里获得的模式一样好。拥有数百个计划列可能表明表设计不佳,而且这些计划列可能真的应该作为具有多条记录的单个列存在 大多数SQL

我有一张桌子

类别1 类别2 平面图 计划 普朗克 2020-12-10 假的 1. 0 1. 2020-12-10 真的 1. 0 0 2020-12-11 假的 0 1. 0 2020-12-11 真的 1. 1. 0 您可以使用:

选择COUNT(*)作为cnt
从你的桌子上
其中,planA=1,planB=0,planC=0;
这可能与不使用动态SQL就可以在这里获得的模式一样好。拥有数百个计划列可能表明表设计不佳,而且这些计划列可能真的应该作为具有多条记录的单个列存在


大多数SQL函数和操作都是基于集合的,集合被定义为多个记录或行。因此,很少有SQL函数会跨任意列进行聚合(
最大值
最小值
,在某些数据库中,可能是例外,但即使在这些数据库中,也必须列出所有列)。

如果有100列具有类似标志,则数据模型存在问题

对于您的特定数据,您需要一个大的
WHERE
子句:

select count(*)
from t
where a = 1 and b = 0 and c = 0 and . . . ;
也就是说,您应该有一个表,其中每个计划一行可用:

category1    category2    plan
2020-12-10   false          A
2020-12-10   false          C
2020-12-10   true           A
. . . 
只有在场的人才会在这张桌子上

然后你可以做:

select category1, category2
from t
group by category1, category2
having count(*) = 1 and min(plan) = 'A';

我认为对于planB和planC的SQL查询,条件是必须的。也许您可以应用如下计算检查:

SELECT COUNT(*) FROM my_table WHERE planA = 1 AND (planB + planC) <> 0;
从my_表中选择COUNT(*),其中planA=1和(planB+planC)0;

在我看来,您可以在SQL中使用PIVOT将行更改为列,您的输出如下所示

类别1类别2名称轴
2020-12-10假平面图1 2020-12-10假计划B 0 2020-12-10假计划1 2020-12-10真实计划1 2020年12月10日真实计划B 0 2020年12月10日真实计划0 ...... .... ...


后数据透视您可以应用group by,然后使数据透视字段的总和等于1,而其他条件字段“name”=1

用您正在使用的数据库标记您的问题。我认为只有在计划相互排斥的情况下,才可以使用包含计划单列的表。我的朋友不是这样的tables@Naseef . . . “相互排斥”是什么意思?这只是一行中作为标志的相同数据的替代表示形式。同一行可以有多个计划,如第1行和第4行所示Lintoff@Naseef . . . 这是由这个答案中表格的前两行表示的。