2013-03-20 9 views
-2

Образец данных:SQL Server - итерацию данные каждого столбца

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  

Это мой запрос: " ВЫБРАТЬ LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, СЕМЬЯ, CACHE_FAMILY, Count = ((SUM (TOTAL))) FROM ( SELECT LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, FAMILY, CACHE_FAMILY, Count (LINE_NO) как Total FROM TX_HSA_SUMM WHERE MT_TIMESTAMP2 BETWEEN ('2013-03-07 10:10:00') И ('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, СЕМЬЯ, CACHE_FAMILY, общая ORDER BY LINE_NO, E_FIELD, F_FIELD, G_FIELD, HSA_STATUS, СЕМЬЯ, CACHE_FAMILY, общая»

Это мои выборочные данные на самом деле. Я уже делаю счет. Как вы можете видеть заголовок столбца. Моя проблема в том, что мне нужно суммировать счетчик, и для каждой строки мне нужно получить процент. Например, общее количество для вышеуказанной записи составляет поэтому для первого количества записей - поэтому расчет должен быть 43/199 * 100. Как просмотреть процент? The ?? средняя колонка, чтобы получить процент. Пожалуйста, помогите мне. Мне нужно это срочно. Это должно быть сделано только для этой конкретной линии после того, как тире его новая строка нет, поэтому, вычисляя процент, он должен считать только эту конкретную строку, не считая и не получая процент.

Есть ли какие-либо предложения, чтобы показать, как получить счет первым. то из этой суммы счет и, наконец. счет должен быть разделен на сумму и * 100, чтобы получить процент. Благодаря

+1

Можете ли вы показать нам запрос sql? Какую версию sql-сервера вы используете? – Arion

ответ

0

Попробуйте использовать следующий запрос:

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

Здесь SUM() используется, чтобы найти сумму значений в столбце.

Как упоминалось в link SUM может использоваться только с числовыми столбцами. Нулевые значения игнорируются.

+0

Im получение этой ошибки Msg 207, уровень 16, состояние 3, строка 2 Недопустимое имя столбца «Count». Msg 207, уровень 16, состояние 3, строка 2 Недопустимое имя столбца «Count». –

+0

попробуйте с обновленным запросом @sentilkumar, как отредактировано в моем сообщении –

+0

Снова с некоторой ошибкой Msg 409, уровень 16, состояние 2, строка 1 Сумма или средняя агрегированная операция не может принимать тип данных varchar в качестве аргумента. Msg 403, уровень 16, состояние 1, строка 1 Недопустимый оператор для типа данных. Оператор равен делению, тип равно varchar. –

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 
+0

Процентный подсчет неверен, потому что 43 должен делить сумму суммы примера 43/199 * 100, поэтому значение равно 21%. это как это должно работать на самом деле –

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