繁体   English   中英

按特定列的总和对SQL查询排序

[英]Order SQL query by the sum of specefic columns

这是我要查询的相当大的表(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

我不知道如何将其与我现有的巨型查询和排序结合起来,而不必在最后添加每列到组中。

由于您追求的值之和在同一行上,因此您无需汇总结果,从而消除了分组依据。

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 t.*
FROM (SELECT t.*,
             ((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 NumYs
      FROM table t
     ) t
WHERE NumYs > 0
ORDER BY NumYs DESC;

尝试选择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分钟,并且完成了一家商品贸易公司的日常损益。这很大。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM