-2

サンプルデータ :

LINE_NO E_FIELD F_FIELD G_FIELD HSA_STATUS  FAMILY  CACHE_FAMILY    Count
23053B  00000   00000   00000   S           SUMMIT      WER           43
23053B  00000   00000   00000   T           SUMMIT      WER           144
23053B  00000   00000   00684   T           SUMMIT      WER           2
23053B  00353   00418   00684   T           SUMMIT      WER           1
23053B  00353   00418   00763   T           SUMMIT      WER           1
23053B  00353   00418   01512   T           SUMMIT      WER           1
23053B  00353   00418   06797   T           SUMMIT      WER           1
23053B  00353   00418   30228   T           SUMMIT      WER           1
23053B  00353   00418   31935   T           SUMMIT      WER           2
23053B  05601   01402   00758   T           SUMMIT      WER           1
23053B  05601   01402   09091   T           SUMMIT      WER           1
23053B  05601   01402   65053   T           SUMMIT      WER           1
-------------------------------------------------------------------
23054B 00000 00000 00000 S                 SUMMIT      WER           37   
23054B 00000 00000 00000 T                 SUMMIT      WER           96    
23054B 00353 00418 00758 T                 SUMMIT      WER           1    
23054B 00354 00414 01095 T                  SUMMIT     WER           1     

これは私のクエリです: " SELECT LINE_NO、E_FIELD、F_FIELD、G_FIELD、HSA_STATUS、FAMILY、CACHE_FAMILY、Count =((SUM(TOTAL)))FROM(SELECT LINE_NO、E_FIELD、F_FIELD、G_FIELD、HSA_STATUS、FAMILY、CACH LINE_NO)as Total FROM TX_HSA_SUMM WHERE MT_TIMESTAMP2 BETWEEN( '2013-03-07 10:10:00')AND( '2013-03-08 10:20:00')GROUP BY LINE_NO、E_FIELD、F_FIELD、G_FIELD、HSA_STATUS、 FAMILY、CACHE_FAMILY)GROUP BY LINE_NO、E_FIELD、F_FIELD、G_FIELD、HSA_STATUS、FAMILY、CACHE_FAMILY、total ORDER BY LINE_NO、E_FIELD、F_FIELD、G_FIELD、HSA_STATUS、FAMILY、CACHE_

これは実際の私のサンプルデータです。私はすでに数えています。ご覧のとおり、列ヘッダーが表示されます。私の問題は、カウントを合計する必要があり、行ごとにパーセンテージを取得する必要があることです。たとえば、上記のレコードの合計は199であるため、最初のレコード数は43であるため、計算は43 /199*100になります。パーセンテージを表示するにはどうすればよいですか??? パーセンテージを取得するための平均列。私がこれを緊急に必要とするのを手伝ってください。それはダッシュの後のその特定のラインラインに対してのみ行われるべきであり、新しいラインはありません。パーセンテージを計算するとき、それはその特定のラインのみをカウントし、パーセンテージを取得する必要があります。

最初にカウントを取得する方法を示すための提案はありますか?次に、その合計からカウントし、最後に。パーセンテージを取得するには、カウントを合計と*100で割る必要があります。ありがとう

4

3 に答える 3

0
;WITH T AS 
(
    SELECT 43 AS [Count]
    UNION ALL
    SELECT 144
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 1
)

SELECT 100.0 * T.[Count] / SUM(T.[Count]) OVER()
FROM T
于 2013-03-20T09:45:08.373 に答える
0

次のクエリを使用してみてください。

select (Count/(select SUM(Count) from tablename))*100 from tablename;

ここでSUM()は、列の値の合計を見つけるために使用されます。

リンクで述べたように、SUM は数値列でのみ使用できます。Null 値は無視されます。

于 2013-03-20T08:56:59.380 に答える
0

最も簡単な方法: 一時テーブル (@temp など) を作成し、上記の結果をそれに挿入して、次の操作を行います。

Declare @temp table
(
    LINE_NO varchar(20), 
    E_FIELD varchar(20),
    F_FIELD varchar(20),
    G_FIELD varchar(20),
   HSA_STATUS varchar(20),
   FAMILY varchar(20),
   CACHE_FAMILY varchar(20),
   CountValue int
 )
 Insert into @temp
 Your above result shown in your question

Declare @CountSum int
Set @CountSum=(Select Sum(CountValue) From @temp)

Select t.*,Cast(Cast((t.CountValue*@CountSum) as Decimal(10,3))/100 as decimal(5,2))    Count_Percentage From @temp t

それは与えるでしょう:

LINE_NO E_FIELD F_FIELD G_FIELD HSA_STATUS  FAMILY  CACHE_FAMILY    Count     Count_Percentage
=============================================================================================== 
23053B  00000   00000   00000   S           SUMMIT  WER               43        85.57
23053B  00000   00000   00000   T           SUMMIT  WER              144        286.56
23053B  00000   00000   00684   T           SUMMIT  WER              2          3.98
23053B  00353   00418   00684   T           SUMMIT  WER              1          1.99
23053B  00353   00418   00763   T           SUMMIT  WER              1          1.99
23053B  00353   00418   01512   T           SUMMIT  WER              1          1.99
23053B  00353   00418   06797   T           SUMMIT  WER              1          1.99
23053B  00353   00418   30228   T           SUMMIT  WER              1          1.99
23053B  00353   00418   31935   T           SUMMIT  WER              2          3.98
23053B  05601   01402   00758   T           SUMMIT  WER              1          1.99
23053B  05601   01402   09091   T           SUMMIT  WER              1          1.99
23053B  05601   01402   65053   T           SUMMIT  WER              1          1.99
于 2013-03-20T09:41:10.093 に答える