Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Sql Server_Mysqli_Mysql Workbench_Bdd - Fatal编程技术网

Sql 一个选择与倍数计数(非常相似),可能吗?

Sql 一个选择与倍数计数(非常相似),可能吗?,sql,sql-server,mysqli,mysql-workbench,bdd,Sql,Sql Server,Mysqli,Mysql Workbench,Bdd,我有个哥们儿 我有这样一个选择: SELECT ES.id, ES.nombre nombreEstacion, COUNT(LE.id) Cuenta FROM estacion ES LEFT JOIN lectura LE ON ES.id = LE.idEstacion LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion WHERE ES.eliminada=0

我有个哥们儿

我有这样一个选择:

SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    COUNT(LE.id) Cuenta
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.resultadoNOK=0 
    OR LE.idEstacion IS NULL
GROUP BY ES.id
SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    COUNT(LE.id) Cuenta,
    SUM(CASE WHEN LE.resultadoNOK = 0 THEN 1 ELSE 0 END) AS COUNT1,
    SUM(CASE WHEN LE.resultadoNOK = 1 THEN 1 ELSE 0 END) AS COUNT2,
    SUM(CASE WHEN LE.resultadoNOK = 3 THEN 1 ELSE 0 END) AS COUNT3
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.resultadoNOK=0 
    OR LE.idEstacion IS NULL
GROUP BY ES.id
ID名称设置计数

我想用这件衣服做一个选择: 同一选择中的ID名称COUNT1 COUNT2 COUNT3

此计数具有相同的结构。它们只有一个区别

count1 is when  (WHERE LE.resultadoNOK=0)
count2 is when  (WHERE LE.resultadoNOK=1)
count3 is when  (WHERE LE.resultadoNOK=3)
有人告诉我,解决方案是使用以下内容: 库恩塔伯爵, 求和(如果(X,X,X)计数2, 求和(如果(X,X,X)计数3

但是我不明白这个结构,也不明白我必须在“如果”中写什么值

我用“CASE”搜索另一个可能性,我也不明白

有人能告诉我这是怎么回事吗


谢谢大家!!:)

当然可以用SUM和case表达式来实现这一点

SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    SUM(case when LE.resultadoNOK = 0 then 1 end) as CuentaUno,
    SUM(case when LE.resultadoNOK = 1 then 1 end) as CuentaDos,
    SUM(case when LE.resultadoNOK = 2 then 1 end) as CuentaTres
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.idEstacion IS NULL
GROUP BY ES.id
    , ES.nombre

我会用一个CASE语句,如下所示:

SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    COUNT(LE.id) Cuenta
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.resultadoNOK=0 
    OR LE.idEstacion IS NULL
GROUP BY ES.id
SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    COUNT(LE.id) Cuenta,
    SUM(CASE WHEN LE.resultadoNOK = 0 THEN 1 ELSE 0 END) AS COUNT1,
    SUM(CASE WHEN LE.resultadoNOK = 1 THEN 1 ELSE 0 END) AS COUNT2,
    SUM(CASE WHEN LE.resultadoNOK = 3 THEN 1 ELSE 0 END) AS COUNT3
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.resultadoNOK=0 
    OR LE.idEstacion IS NULL
GROUP BY ES.id

哦,谢谢!明天我尝尝!但这两种方法是一样的?我还有一个伙计。代码有什么区别:按ES.id分组(就像我做的那样)或者按ES.id分组,ES.nombre更改一些内容?因为除非nombre也在聚合中,否则您不能仅按eES.id分组。另外请注意,我删除了where谓词,该谓词将结果限制为仅显示resultadoNOK=0的行?如果您希望显示多个值,这是必需的。哦,谢谢!明天我将品尝它!但是这两种方法是一样的?你还有一个家伙。代码中的区别是什么:groupby ES.id(像我一样)还是groupby ES.id,ES.nombre改变了什么?我没有注意到在groupby中。你需要在groupby中包含ES.nombre,因为它没有聚合。不起作用:(((我测试你的解决方案,但是有很多寄存器是空的。我测试的解决方案是“当LE.resultadoNOK=0时,那么1结束)”但我认为这是错误的。如果你的**resultadoNOK可以为空,我会使用
SUM(当ISNULL(LE.resultadoNOK,-1)=0时,那么1结束)
如果您不希望空值计数。这会将空值转换为-1,因此不匹配。您使用的是什么:sql server还是mysql?