2014-04-24 33 views
1

我要統計所有具有價值在我的表列> = 10 這裏是我的表:SQL統計所有具有值的列大於10和概括起來

日期##### ||值1 || Value2 ||價值3

23/04/2014 || __ 1,2 || __ 12,3 || __ 10 ||

23/04/2014 || __ 11,2 || ____ 3 || __ 10,3 ||

24/04/2014 || __ 10,9 || ____ 3 || __ 1 ||

我希望它顯示:

日期##### || 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" 

基於從黑洞解決這個已經改變了:

Dim strCommand As String = "Select t.d, sum(t.valcount) cnt from (select [date] AS d, CASE WHEN t1.ManualAssists1 >= 10 THEN 1 ELSE 0 END + CASE WHEN t1.ManualAssists2 >= 10 THEN 1 ELSE 0 END + CASE WHEN t1.ManualAssists3 >= 10 THEN 1 ELSE 0 END AS valcount from tbBooth t1) t group by t.d" 

它的作品,但我想只有最後3行基於顯示ASC訂單。 反正有沒有怎麼辦?

感謝進步....

+0

沒有答案,但是解釋語法錯誤。日期是保留關鍵字。你需要圍繞它的方括號'[Date]' – Steve

+0

語法錯誤是由HAVING子句引起的。 HAVING子句必須在GROUP BY子句之後出現。 – mordack550

回答

8

嘗試

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 table t1 
     ) t 
group by t.d 
    ; 
+0

它的工作原理.... 謝謝先生...你真的救了我....非常感謝你.... –

+0

親愛的Collapsar, 我想再問一次,你知道如何只顯示在ASC順序中的最後兩行... 謝謝... –

+0

@ user3567963不幸的是,我不知道SQL Server副手的答案。我明天可以研究它。無論如何,我建議你讓它成爲另一個SO問題,因爲它可能是普遍感興趣的。 – collapsar

2
SELECT 
    D, 
    SUM(one + two + three) AS tcount 
FROM 
    (
     SELECT 
     [Date] AS D, 
     CASE WHEN Value1 >= 10 THEN 1 ELSE 0 END AS one, 
     CASE WHEN Value2 >= 10 THEN 1 ELSE 0 END AS two, 
     CASE WHEN Value3 >= 10 THEN 1 ELSE 0 END AS three 
     FROM 
     tbBooth 
    ) 
GROUP BY 
    D 
+0

謝謝您回覆我的帖子並回答我的問題先生... –

相關問題