SQL对所有列进行计数、求和,并按ASC顺序显示最后3行

SQL对所有列进行计数、求和,并按ASC顺序显示最后3行,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我想统计表中值>=10的所有列。 这是我的桌子: Date##### | Value1 | Value2 | Value3 23/04/2014 | 1,2 | 12,3 | 10 23/04/2014 | 11,2 | 3 | 10,3 24/04/2014 | 10,9 | 3 | 1 我希望它显示: Date##### | Count 23/04/2014 | 4

我想统计表中值>=10的所有列。 这是我的桌子:

 Date#####   |  Value1 |  Value2 |   Value3
 23/04/2014  |  1,2    |    12,3 |    10  
 23/04/2014  |  11,2   |    3    |   10,3     
 24/04/2014  |  10,9   |    3    |     1  
我希望它显示:

 Date#####   | Count 
 23/04/2014  |  4  
 24/04/2014  |  1 
假设我有很多组日期,我希望它只显示最后3组日期

这是我的第一个代码:

Dim strCommand As String = "Select Date, count(*) as tcount 
                            from tbBooth 
                            having count(*) >= 10 
                            group by date"
已根据Collapsar的解决方案更改为:

Dim strCommand As String = "Select t.d, sum(t.valcount) cnt 
                            from (select [date] AS d, 
                                         CASE WHEN t1.Value1 >= 10 THEN 1 
                                              ELSE 0 END + 
                                         CASE WHEN t1.Value2 >= 10 THEN 1 
                                              ELSE 0 END + 
                                         CASE WHEN t1.Value3 >= 10 THEN 1 
                                              ELSE 0 END AS valcount 
                                   from tbBooth t1) t 
                            group by t.d"
它可以工作,但我只想根据
ASC
顺序显示最后3行。
还有其他方法吗?

您需要使用
limit
来限制返回的行数..选择前3位..按日期排序亲爱的Siva,,我在代码中tbBooth t1之后添加了limit 3,但它给了我一个错误:“limit”附近的语法不正确。亲爱的Mihai,我无法使用SELECT TOP 3,因为我希望ASC中的最后3行而不是前3行。首先,您不应该在SQL Server数据库的列中存储逗号分隔的值。您应该阅读参考数据库以及如何正确使用它们。其次,您不是在“计算”日期,而是在计算大于10的值并按日期分组。这就是你想要的吗?从你的帖子中还不清楚4月23日应该算两次还是四次。这很有效。。。。谢谢你,先生。。。你真的帮了我。我以前把SELECT上衣放错边了。非常感谢。亲爱的t-克劳森,我可以问另一个问题吗,先生。我在表中添加列类型以再次区分它。有两种类型:是和否,在我使用上面的代码添加另一个组之后。我想把YES组别名为TYES,NO组别名为TNO,先生,可以这样做吗?谢谢您,先生。@user3567963您的请求毫无意义。除非你想数一数“是”和“否”。试着阅读“分组依据”
SELECT d, cnt
FROM 
(
  SELECT TOP 3 [date] AS d, 
               SUM(CASE WHEN Value1 >= 10 THEN 1 ELSE 0 END + 
                   CASE WHEN Value2 >= 10 THEN 1 ELSE 0 END + 
                   CASE WHEN Value3 >= 10 THEN 1 ELSE 0 END) AS cnt
  FROM tbBooth
  GROUP BY [date]
  ORDER BY [date] DESC
) x
ORDER BY d ASC