2016-05-10 9 views
0

Я пытаюсь выполнить запрос, чтобы получить результаты, которые я действительно хочу, но у меня есть некоторые проблемы. Это вопрос, который я в настоящее время работает:Как решить эту проблему?

SELECT Filetype AS 'Extensão', 
COUNT(*) AS 'Nº total de extensões', 
((COUNT(Filetype) * 100.0)/(SELECT COUNT(*) FROM infofile)) AS 'Percentagem (%)', 
SUM(Filesize) AS 'Total(KB)' 
FROM infofile 
GROUP BY Filetype 
UNION ALL 
SELECT '---------------', 
COUNT('Nº total de extensões'), 
((COUNT(Filetype) * 100)/(SELECT COUNT(Filetype) FROM infofile)), 
SUM(Filesize) 
FROM infofile 

Колонка Filetype является NVARCHAR, так что я не могу использовать AVG, как я хочу. Вывод запроса теперь дает мне результат общей, как 100.0000000000

enter image description here

+1

Какая СУБД вы используете? В вашем вопросе есть нестандартный (недействительный) SQL. –

+0

Какой результат вы ожидаете? –

+0

Это то, что я ожидаю, но я хочу получить это 100.0000000 ... значение без десятичного числа –

ответ

0

колонного типа во второй части вашего союза должен соответствовать, что в первой части. Поскольку в первой части вы умножаетесь на 100.0, ваши значения Percentage всегда будут иметь десятичную часть. Вот почему последняя часть показывает 100.00000 - даже если она будет выполнена сама по себе, она вернет код.

Если вы хотите сохранить его как единственный запрос на объединение, вы можете рассмотреть вопрос о переносе значений процента на nvarchar после выполнения расчет. Значения с плавающей запятой в первом выборе будут сохранены как таковые, в то время как целочисленный результат вычисления во второй части должен быть преобразован непосредственно в строку без принудительного преобразования в форму с плавающей запятой.

Конечно, если вы хотите использовать эти значения в числовых вычислениях позже, это не вариант.

1

Если FileType это номер:

SELECT Filetype AS [Extensão], 
     COUNT(*) AS 'Nº total de extensões', 
     COUNT(*) * 100.0)/SUM(COUNT(*)) OVER() AS [Percentagem (%)], 
     SUM(Filesize) AS [Total(KB)] 
FROM infofile 
GROUP BY GROUPING SETS ((Filetype),()); 

Я думаю это будет делать то, что вы хотите. Возможно, вам нужно будет рассчитать процент немного по-разному для итоговой итоговой строки.

+0

Нет. Я уже говорил, что Filetype является значением Nvarchar –

+0

@Rekcs, вы * попробовали * решение перед комментированием? –

+0

Это не работает. –

Смежные вопросы