2

数値のリストが特定の範囲に入る回数を数えようとしています。

データ:

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

1 つのクエリで case ステートメントと count を使用する。ケースステートメント:

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 を使用してこのクエリを作成していますが、通常は助けを求めることはありません。私は立ち往生していて、これに頭を悩ませています。ありがとう

4

2 に答える 2

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
于 2013-07-29T20:04:04.990 に答える