2013-07-29 27 views
2

我想要計算一個數字列表落入一定範圍內的次數。使用case語句來計算查找範圍

數據:

advance: 
-------- 
5000 
5000 
10125 
5000 
0 
15000 
[NULL] 
7000 
8000 
[NULL] 
7000 
2275 
6000 
2000 
4000 
7000 
4000 
8000 

使用case語句和一個查詢次數。 案例聲明:

CASE 
    WHEN 
     advance > 10000 
    THEN 
     /* Display as 'High'*/ 
    WHEN 
     advance >= 5000 and advance <= 10000 
    THEN 
     /*Display as 'Moderate'*/ 
    WHEN 
     advance < 5000 
    THEN 
     /*Display as 'Low'*/ 
    ELSE 
     /*Display as 'N/A'*/ 
END 

但隨着這個轉折是,數據在單個單元格進行格式化。 我有什麼至今:

"i. Category  " + "Number" + char(13)+char(10) + 
"ii. -----------------------------------" + char(13)+char(10) + 
"iii. High:   " + /*Display High*/ + char(13)+char(10) + 
"iv. Low:   " + /*Display Low*/ + char(13)+char(10) + 
"v. Moderate: " + /*Display Moderate*/ + char(13)+char(10) + 
"vi. N/A    " + /*Display N/A */ + 

所以,最終的結果應該是這樣的:

i. Category  Number 
ii. -------------------- 
iii. High   5 
iv. Low  
v. Moderate  
vi. N/A   

我使用Sybase寫這個查詢,通常我不尋求幫助。我只是陷入困境,無法圍繞這一點纏繞我的大腦。由於

回答

0

我不知道它的工作原理,但我希望我的想法可以幫助你

select "i. Category  " + "Number" + char(13)+char(10) + 
"ii. -----------------------------------" + char(13)+char(10) + 
"iii. High:   " + cast((select count(1) 
           from tabData 
           where advance > 10000) as varchar) + char(13)+char(10) + 
"iv. Low:   " + cast((select count(1) 
           from tabData 
           where advance >= 5000 
           and advance <= 10000) as varchar) + char(13)+char(10) + 
"v. Moderate: " + cast((select count(1) 
          from tabData 
          where advance < 5000) as varchar) + char(13)+char(10) + 
"vi. N/A    " + cast((select count(1) 
           from tabData 
           where advance is null) as varchar) 
+0

哇!它的工作!這是驚人的!謝謝! – user2561924

+0

@ user2561924我很高興我可以幫助你。 – Parado

+0

我也是!我無法相信答案如此簡單,我覺得我太過於複雜。 – user2561924

2

你可以使用一個GROUP BY聲明:

SELECT Category, Count(Category) 
FROM (SELECT CASE 
       WHEN advance > 10000 
       THEN 'High' as Category 
       WHEN advance >= 5000 and advance <= 10000 
       THEN 'Moderate' as Category 
       WHEN advance < 5000 
       THEN 'Low' as Category 
       ELSE 
       'N/A' as Category 
      END 
     FROM your_table_name) as CategoriesResult 
GROUP BY Category 

如果你想生成一個文本值,你可以把它包裝成一個額外的查詢,追加設置到最終結果的各記錄最終文本值:

DECLARE @result AS VARCHAR(MAX) 

SET @result = "i. Category  Number" + char(13) + char(10) + 
       "ii. -----------------------------------" + char(13) + char(10) 

SELECT @result = @result + CONVERT(varchar(8), Category) 
         + " " 
         + CONVERT(VARCHAR(8), CategoryCount) + char(13) + char(10) 
FROM 
    (SELECT Category, Count(Category) as CategoryCount 
     FROM (SELECT CASE 
        WHEN advance > 10000 
         THEN 'High' as Category 
        WHEN advance >= 5000 and advance <= 10000 
         THEN 'Moderate' as Category 
        WHEN advance < 5000 
         THEN 'Low' as Category 
        ELSE 
         'N/A' as Category 
        END 
       FROM your_table_name) as CategoriesResult 
     GROUP BY Category 
    )SourceTable 
+0

我正在說什麼,但太懶惰/緩慢解釋+1 – Elias

+0

+1但OP希望在單個字段中得到結果,可以用這種SQL以某種方式打包來實現這一目標嗎? – philreed

+0

@philreed - goot point ..我最初沒有意識到,我更新了帖子 –