2016-12-02 2 views
2

У меня есть следующий SQL-запрос:Удаление данных из вывода последних 3-х символов

SELECT Sys.Name0, Sys.User_Name0, SF.FilePath, SF.Filename, Count(SF.FileName) AS FileCount, Sum(SF.FileSize/1024/1024) AS 'Used Space' 
FROM v_R_System Sys 
INNER JOIN v_GS_SoftwareFile SF ON Sys.ResourceID = SF.ResourceID 
WHERE SF.FilePath LIKE '%' + 'Users' + '%' + '%documents%' 
    AND SF.FileSize > 0 
GROUP BY Sys.Name0, Sys.User_Name0, SF.Filename, SF.FilePath 
HAVING Count(SF.FileName) > 0 
ORDER BY Sys.Name0 DESC 

Проблема заключается в том, я получаю слишком много информации. Я хотел бы исключить записи и не считать, где FILENAME похож на .exe, .dll, .ico, например.

+4

Вы используете MySQL или MS SQL Server? – jarlh

+1

Возможно, используя предложение where? Или, если вы хотите, чтобы они не учитывались, но все же возвращались, вы можете использовать условную агрегацию. –

+0

Пожалуйста, прочитайте [это] (http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/) для получения некоторых советов по улучшению вашего вопроса. – HABO

ответ

1

Если вы хотите записи исключенные вы могли бы добавить это к пункту, где:

AND RIGHT(FileName,4) NOT IN('.exe', '.dll', '.ico', 'etc.') 

ИЛИ

AND Filename Not Like '%.exe' AND Filename Not Like '%.dll' AND Filename Not Like '%.ico' AND etc.... 
+0

ok, в каком месте я бы поставил любой оператор, потому что я не уверен, как добавить дополнительный оператор «где» – dwhite

+0

@dwhite у вас может быть только одно предложение WHERE для каждого оператора выбора, FYI –

+0

@dwhite Я имел в виду, что вы должны добавить эти утверждения в ваше существующее предложение where. Извините за путаницу. –

1

Используйте это Если пункт (предполагается, что SQL Server)

Where SF.FilePath like '%'+'Users'+'%' +'%documents%' 
and SF.FileSize > 0 
And FileName Not Like '%.exe' 
And FileName Not Like '%.dll' 
And FileName Not Like '%.ico' 

Это должно вас заставить ...

+0

Это не сработало, все равно сообщает ini, dll, но удалил exe – dwhite

+0

@dwhite обновить ответ, извинения. –

0

Вы можете просто добавить его в свое предложение where в качестве дополнительного условия. Если вы не указали имена файлов:

AND RIGHT(FileName,4) NOT IN('.exe', '.dll', '.ico', 'etc.') 

Чтобы исключить размер файлов размером более 1 Мб.

AND SF.FileSize > 1 

Полное заявление:

SELECT 
    Sys.Name0, 
    Sys.User_Name0, 
    SF.FilePath, 
    SF.Filename, 
    Count(SF.FileName) AS FileCount, 
    Sum(SF.FileSize/1024/1024) AS 'Used Space' 
FROM 
    v_R_System Sys 
    INNER JOIN v_GS_SoftwareFile SF ON Sys.ResourceID = SF.ResourceID 
WHERE 
    SF.FilePath LIKE '%' + 'Users' + '%' + '%documents%' 
    AND SF.FileSize > 1 
    AND RIGHT(FileName,4) NOT IN('.exe', '.dll', '.ico', 'etc.') 
GROUP BY Sys.Name0, Sys.User_Name0, SF.Filename, SF.FilePath 
HAVING Count(SF.FileName) > 0 
ORDER BY Sys.Name0 DESC 
+0

Хорошо, что отлично работает, однако у меня есть еще одна проблема: я хочу экспортировать ее в Excel CSV, но это более 2 миллионов строк, есть ли способ экспортировать только 1 миллион строк за раз? – dwhite

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