【发布时间】:2013-08-30 19:42:29
【问题描述】:
在我ORDER BY cnt DESC 之后,我的结果是
fld1 cnt
A 9
E 8
D 6
C 2
B 2
F 1
我需要显示前 3 名,其余的汇总为“其他”,如下所示:
fld1 cnt
A 9
E 8
D 6
other 5
已编辑:
感谢大家的意见。如果您看到实际的陈述,也许会有所帮助:
SELECT
CAST(u.FA AS VARCHAR(300)) AS FA,
COUNT(*) AS Total,
COUNT(CASE WHEN r.RT IN (1,11,12,17) THEN r.RT END) AS Jr,
COUNT(CASE WHEN r.RT IN (3,4,13) THEN r.RT END) AS Bk,
COUNT(CASE WHEN r.RT NOT IN (1,11,12,17,3,4,13) THEN r.RT END ) AS Other
FROM R r
INNER JOIN DB..RTL rt
ON r.RT = rt.RTID
INNER JOIN U u
ON r.UID = u.UID
WHERE rt.LC = 'en'
GROUP BY CAST(u.FA AS VARCHAR(300))--FA is ntext
ORDER BY Total DESC
生成的结果有 19 条记录。我需要显示前 5 名并将其余的总结为“其他 FA”。我不想用这种语句从一个选择中选择一个选择。我更多的是寻找一些 SQL 函数。也许 ROW_NUMBER 是个好主意,但我不知道在这种情况下如何应用它。
【问题讨论】:
-
您可能想在这里查看接受的解决方案:stackoverflow.com/questions/14478361/…
-
@PM77-1 不。这个问题不同。
-
您的结果集有 2 个字段,而您的查询有 5 个,而另一个字段中没有 1 个字段:P 所以我现在不确定两者之间的关系...
-
如果您将
FROM @MyTable x替换为派生表,则可以调整我的解决方案:FROM (your query without ORDER BY) x以及其他更改。 -
结果集也有5个字段。我应该最开始的 2 才是最重要的。我需要 Total 字段中的前 5 名
标签: sql sql-server