获取每列的百分比值 [英] Getting percentage value for each column
问题描述
**样本数据:**
LINE_NO E_FIELD F_FIELD G_FIELD HSA_STATUS家庭CACHE_FAMILY计数百分比
23053B 00000 00000 00000 S峰会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,
计数=((SUM(TOTAL) )))
FROM
(
SELECT LINE_NO,
E_FIELD,
F_FIELD,G_FIELD,
HSA_STATUS,
FAMILY,
CACHE_FAMILY,
计数(LINE_NO) as 总计
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
) as a
GROUP BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS ,FAMILY,CACHE_FAMILY,总计
ORDER BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS, FAMILY,CACHE_FAMILY,总计
这实际上是我的样本数据。我已经计算了。正如您可以看到列标题。我的问题是我需要总结计数和每行所需的百分比。例如,上述记录的总数为** 199 **,因此第一个记录计数为** 43 **,因此计算结果应为** 43/199 * 100 **。如何查看百分比? ?? ??获得百分比的平均值。请帮助我,我迫切需要这个。只应该在破折号之后的那条特定的生产线上进行新的生产线,否则在计算百分比时,它应该只计算特定的生产线没有计数并获得百分比。
是否有任何建议可以显示如何获得计数。然后从那个总和计数到最后。计数应除以总和和* 100得到百分比。
25-3-2013今天所做的更改是:
我设法准备百分比。有没有想法如何根据不同的行号进行分区,并且计数值应该按顺序排列。谢谢
检查脚本...你会直接写没有GROUP BY子句的SELECT语句...
DECLARE < span class =code-sdkkeyword> @ TX_HSA_SUMM TABLE (LINE_NO VARCHAR ( 20 ),E_FIELD VARCHAR ( 20 ),F_FIELD VARCHAR ( 20 ),G_FIELD VARCHAR ( 20 ),HSA_STATUS CHAR ( 1 ) ,FAMILY VARCHAR ( 20 ),
CACHE_FAMILY VARCHAR ( 20 ),Count INT )
INSERT INTO @TX_HSA_SUMM (LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY,Count)
SELECT ' 23053B',' 00000',' 00000', ' 00000',' S',' SUMMIT',' WER', 43
UNION ALL
SELECT ' 23053B',' 00000',' 00000',' 00000',' T', ' SUMMIT',' WER', 144
UNION ALL
SELECT ' 23053B',' 00000',' 00000',' 00684', ' T',' SUMMIT',' WER', 2
UNION ALL
SELECT ' 23053B',' 00353',' 00418',' 00684',' T',' SUMMIT',' WER' , 1
UNION ALL
SELECT ' 23053B',' 00353',' 00418',' 00763',' T' ,' SUMMIT',' WER', 1
UNION ALL
SELECT ' 23053B',' 00353' ,' 00418',' 01512',' T',' SUMMIT',' WER', 1
UNION ALL
SELECT ' 23053B',' 00353',' 00418',' 06797',' T',' SUMMIT',' WER', 1
UNION ALL
SELECT ' 23053B',' 00353',' 00418',' 30228',' < span class =code-string> T',' SUMMIT',' WER', 1
< span class =code-keyword> UNION ALL
SELECT ' 23053B',' 00353',' 00418',' 31935',' T',' SUMMIT',' WER', 2
UNION ALL
SELECT ' 23053B',' 05601',' 01402',' 00758',' T',' SUMMIT',' WER', 1
UNION 所有
SELECT ' 23053B' ,' 05601',' 01402',' 09091',' T',' SUMMIT',' WER', 1
UNION ALL
SELECT ' 23053B',' 05601',' 01402',' 65053',' T',' SUMMIT',' WER ', 1
SELECT LINE_NO,E_FIELD,F_FIELD, G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY,Count FROM @ TX_HSA_SUMM
SELECT LINE_NO,
E_FIELD,
F_FIELD,G_FIELD,
HSA_STATUS,
FAMILY,
CACHE_FAMILY,
CAST(ROUND(((Count / T.SumofCount)* 100. 00 ), 2 )< span class =code-keyword> AS NUMERIC ( 10 , 2 ))' 百分比
FROM @ TX_HSA_SUMM
INNER JOIN ( SELECT SUM(Count)* < span class =code-digit> 1 。 0 ' SumofCount'
FROM @ TX_HSA_SUMM
WHERE MT_TIMESTAMP2 BETWEEN (' 2013-03-07 10:10:00') AND (' 2013-03-08 10:20:00')
)T ON 1 = 1
WHERE MT_TIMESTAMP2 BETWEEN (' 2013-03-07 10:10:00') AND (' 2013-03-08 10:20:00')
问候,
GVPrabu
你需要这样的东西:
SELECT t1.LINE_NO,t1.E_FIELD,t1.F_FIELD,t1.G_FIELD,t1.HSA_STATUS,t1.FAMILY,t1.CACHE_FAMILY,SUM (t1.TOTAL) AS CountOfLineNo,t2.TotalOfLineNo,(SUM(t1.TOTAL)/ t2.TotalOfLineNo * 100 ) AS 百分比
FROM (
SELECT LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY,Count(LINE_NO) 总计
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
) AS t1 LEFT JOIN (
SELECT LINE_NO,COUNT(LINE_NO) AS TotalOfLineNo
FROM TX_HSA_SUMM
WHERE MT_TIMESTAMP2 BETWEEN (' 2013-03-07 10:10 :00' AND ' 2013-03-08 10:20 :00')
) AS t2 ON t1.LINE_NO = t2。 LINE_NO
GROUP BY t1.LINE_NO,t1.E_FIELD,t1.F_FIELD,t1.G_FIELD ,t1.HSA_STATUS,t1.FAMILY,t1.CACHE_FAMILY,t1.Total
ORDER BY t1.LINE_NO,t1.E_FIELD,t1.F_FIELD,t1.G_FIELD,t1.HSA_STATUS,t1.FAMILY,t1.CACHE_FAMILY,t1.Total
可能,你'需要 CONVERT / CAST [ ^ ]百分比列到预期格式。
试试这个:
SELECT
B. *
,百分比=计数* 100. 0 / SUM(计数) OVER ( PARTITION BY 1 )
FROM
(
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,
CACHE_FAMILY,
Count(LINE_NO) as 总计
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
) as a
GROUP BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY,总计
) B
< span class =code-keyword> ORDER BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY,Count
**Sample data :**
LINE_NO E_FIELD F_FIELD G_FIELD HSA_STATUS FAMILY CACHE_FAMILY Count Percentage
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 ??
This is my query:
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,
CACHE_FAMILY,
Count(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
) as a
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_FAMILY,total
This is my sample data actually. I already make the count. As You can see the column header. My problem is I need to sum the count and the for each row I need to get the percentage. For example the total for the above record is **199** so for the first record count is **43** so the calculation should be **43/199 * 100**. How can I view the percentage? The ?? mean column to get percentage. Please help me I need this urgently.it should be done only for that particular line line after the dash its a new line no so when calculating the percentage it should count only that particular line no count and get the percentage.
Is there any suggestion to show how to get the count first. then from that sum the count and finally. the count should be divided with the sum and * 100 to get percentage.
25-3-2013 changes made for today is:
I manage to get the percentage ready. Is there any idea how to do partition according with the different line number and the count value should be in desc order. Thanks
Hi,
Check the script... U will write direct SELECT Statement with out GROUP BY Clause...
DECLARE @TX_HSA_SUMM TABLE(LINE_NO VARCHAR(20), E_FIELD VARCHAR(20), F_FIELD VARCHAR(20), G_FIELD VARCHAR(20), HSA_STATUS CHAR(1), FAMILY VARCHAR(20), CACHE_FAMILY VARCHAR(20), Count INT) INSERT INTO @TX_HSA_SUMM(LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, FAMILY, CACHE_FAMILY, Count) SELECT '23053B','00000','00000','00000','S','SUMMIT','WER',43 UNION ALL SELECT '23053B','00000','00000','00000','T','SUMMIT','WER',144 UNION ALL SELECT '23053B','00000','00000','00684','T','SUMMIT','WER',2 UNION ALL SELECT '23053B','00353','00418','00684','T','SUMMIT','WER',1 UNION ALL SELECT '23053B','00353','00418','00763','T','SUMMIT','WER',1 UNION ALL SELECT '23053B','00353','00418','01512','T','SUMMIT','WER',1 UNION ALL SELECT '23053B','00353','00418','06797','T','SUMMIT','WER',1 UNION ALL SELECT '23053B','00353','00418','30228','T','SUMMIT','WER',1 UNION ALL SELECT '23053B','00353','00418','31935','T','SUMMIT','WER',2 UNION ALL SELECT '23053B','05601','01402','00758','T','SUMMIT','WER',1 UNION ALL SELECT '23053B','05601','01402','09091','T','SUMMIT','WER',1 UNION ALL SELECT '23053B','05601','01402','65053','T','SUMMIT','WER',1 SELECT LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, FAMILY, CACHE_FAMILY, Count FROM @TX_HSA_SUMM SELECT LINE_NO, E_FIELD, F_FIELD,G_FIELD, HSA_STATUS, FAMILY, CACHE_FAMILY, CAST(ROUND(((Count/T.SumofCount) *100.00),2) AS NUMERIC(10,2)) 'Percentage' FROM @TX_HSA_SUMM INNER JOIN (SELECT SUM(Count)* 1.0 'SumofCount' FROM @TX_HSA_SUMM WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') AND ('2013-03-08 10:20:00') ) T ON 1=1 WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') AND ('2013-03-08 10:20:00')
Regards,
GVPrabu
You need something like this:
SELECT t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, t1.CACHE_FAMILY, SUM(t1.TOTAL) AS CountOfLineNo, t2.TotalOfLineNo, (SUM(t1.TOTAL) / t2.TotalOfLineNo * 100) AS Percentage FROM ( SELECT LINE_NO, E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY, Count(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 ) AS t1 LEFT JOIN ( SELECT LINE_NO, COUNT(LINE_NO) AS TotalOfLineNo FROM TX_HSA_SUMM WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00' AND '2013-03-08 10:20:00') ) AS t2 ON t1.LINE_NO = t2.LINE_NO GROUP BY t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, t1.CACHE_FAMILY, t1.Total ORDER BY t1.LINE_NO, t1.E_FIELD, t1.F_FIELD, t1.G_FIELD, t1.HSA_STATUS, t1.FAMILY, t1.CACHE_FAMILY, t1.Total
Probably, you''ll need to CONVERT/CAST[^] Percentage column to expected format.
Try this:
SELECT B.* , Percentage= Count *100.0 /SUM(Count) OVER (PARTITION BY 1) FROM ( 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, CACHE_FAMILY, Count(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 ) as a GROUP BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY,total )as B ORDER BY LINE_NO,E_FIELD,F_FIELD,G_FIELD,HSA_STATUS,FAMILY,CACHE_FAMILY,Count
这篇关于获取每列的百分比值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!