Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
按specefic列的总和排序SQL查询_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

按specefic列的总和排序SQL查询

按specefic列的总和排序SQL查询,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,下面是我要查询的相当大的表SQL Server 2005的摘录: id (primary key) | account | phone | employee | address ------------------------------------------------------------------ 1 | 123 | Y | Y | N 2 | 456 |

下面是我要查询的相当大的表SQL Server 2005的摘录:

id (primary key) |  account  |  phone  |  employee  | address
------------------------------------------------------------------
1                |   123     |    Y    |    Y       |   N
2                |   456     |    N    |    N       |   N
3                |   789     |    Y    |    Y       |   Y
我只需要返回电话、员工或地址中至少有一个Y的行,这里没有显示大约10个其他行。然后我需要根据三个结果中Y的数量对结果进行排序

我试过这样得到tagTotal:

SELECT
SUM(
  CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
  )
  FROM table
  GROUP BY id
这将返回:

tagTotal
---------------
2
0
3

我不知道如何将它与我现有的巨型查询结合起来并按它排序,而不将每一列添加到末尾的group by中。

由于您要查找的值的总和在同一行上,因此不需要对结果进行聚合,从而消除了对group by的需要

SELECT
CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END as Total
FROM table

由于要查找的值的总和在同一行上,因此无需对结果进行聚合,从而无需使用group by

SELECT
CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END as Total
FROM table

由于要查找的值的总和在同一行上,因此无需对结果进行聚合,从而无需使用group by

SELECT
CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END as Total
FROM table

由于要查找的值的总和在同一行上,因此无需对结果进行聚合,从而无需使用group by

SELECT
CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END  + 
CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END as Total
FROM table

尝试选择ID并按总和排序

SELECT id, 
SUM(
  CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
  ) as numsum
  FROM table
  ORDER BY numsum

尝试选择ID并按总和排序

SELECT id, 
SUM(
  CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
  ) as numsum
  FROM table
  ORDER BY numsum

尝试选择ID并按总和排序

SELECT id, 
SUM(
  CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
  ) as numsum
  FROM table
  ORDER BY numsum

尝试选择ID并按总和排序

SELECT id, 
SUM(
  CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
  + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
  ) as numsum
  FROM table
  ORDER BY numsum
这应该起作用:

select *
from
(
    SELECT
       id, 
       SUM(
           CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
          ) tagTotal
  FROM table
  GROUP BY id
) x
where x.tagTotal <> 0
order by x.tagTotal desc
内部查询基本上是您自己的,添加了我认为您需要的Id,并为总和指定了一个名称。然后将其用作外部查询的输入,不包括总数为零的查询和先进行最高和排序的查询

顺便说一句,这不是一个大的查询。我写过的最大的单选报表涵盖了250多行,运行了20分钟,还做了一家商品贸易公司的每日损益表。太大了…

这应该可以:

select *
from
(
    SELECT
       id, 
       SUM(
           CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
          ) tagTotal
  FROM table
  GROUP BY id
) x
where x.tagTotal <> 0
order by x.tagTotal desc
内部查询基本上是您自己的,添加了我认为您需要的Id,并为总和指定了一个名称。然后将其用作外部查询的输入,不包括总数为零的查询和先进行最高和排序的查询

顺便说一句,这不是一个大的查询。我写过的最大的单选报表涵盖了250多行,运行了20分钟,还做了一家商品贸易公司的每日损益表。太大了…

这应该可以:

select *
from
(
    SELECT
       id, 
       SUM(
           CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
          ) tagTotal
  FROM table
  GROUP BY id
) x
where x.tagTotal <> 0
order by x.tagTotal desc
内部查询基本上是您自己的,添加了我认为您需要的Id,并为总和指定了一个名称。然后将其用作外部查询的输入,不包括总数为零的查询和先进行最高和排序的查询

顺便说一句,这不是一个大的查询。我写过的最大的单选报表涵盖了250多行,运行了20分钟,还做了一家商品贸易公司的每日损益表。太大了…

这应该可以:

select *
from
(
    SELECT
       id, 
       SUM(
           CASE WHEN [phone] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [employee] = 'Y' THEN 1 ELSE 0 END
           + CASE WHEN [address] = 'Y' THEN 1 ELSE 0 END
          ) tagTotal
  FROM table
  GROUP BY id
) x
where x.tagTotal <> 0
order by x.tagTotal desc
内部查询基本上是您自己的,添加了我认为您需要的Id,并为总和指定了一个名称。然后将其用作外部查询的输入,不包括总数为零的查询和先进行最高和排序的查询


顺便说一句,这不是一个大的查询。我写过的最大的单选报表涵盖了250多行,运行了20分钟,还做了一家商品贸易公司的每日损益表。这太大了…

您可以将其作为一列进行添加,然后对结果进行排序。聚合似乎是不必要的,至少对于问题中的样本数据来说是这样。每个id只有一行


您只需将其作为列进行添加,然后对结果进行排序。聚合似乎是不必要的,至少对于问题中的样本数据来说是这样。每个id只有一行


您只需将其作为列进行添加,然后对结果进行排序。聚合似乎是不必要的,至少对于问题中的样本数据来说是这样。每个id只有一行


您只需将其作为列进行添加,然后对结果进行排序。聚合似乎是不必要的,至少对于问题中的样本数据来说是这样。每个id只有一行


因为不需要跨行求和,所以执行内联求和。因为不需要跨行求和,所以执行内联求和。因为不需要跨行求和,所以执行内联求和。因为不需要跨行求和,所以执行内联求和。