2016-12-07 35 views
0

我需要採取列的文件名,並在'。'後創建一個名爲擴展的新列,這需要是一個稱爲擴展名的視圖。腳本如何刪除擴展名並放在單獨的列

此腳本在訪問,但似乎沒有相當於 - InStrRev

SELECT [UserProfile12_7-512-1mb].FileName, 
     Right([Filename], Len([Filename])-InStrRev([Filename],".")) AS Extension, 
     [UserProfile12_7-512-1mb].ComputerName, 
     [UserProfile12_7-512-1mb].KB 
FROM [UserProfile12_7-512-1mb]; 

然後,我需要使用新視圖擴展名創建另一個腳本,並通過最後一個擴展名加入另一個表和組。 在訪問腳本是這樣的:

SELECT ExtensionSheet.Extension, Sum([UserProfile12_7-512-1mb].KB) AS SumOfKB 
FROM [UserProfile12_7-512-1mb] 
INNER JOIN ExtensionSheet ON [UserProfile12_7-512-1mb].ComputerName = ExtensionSheet.ComputerName 
GROUP BY ExtensionSheet.Extension; 

下面是表的屏幕截圖:

Table2 Table1

回答

0

您可以使用此表達式。

RIGHT(t.[FileName],IIF(CHARINDEX('.',REVERSE(t.[FileName]))>0,CHARINDEX('.',REVERSE(t.[FileName]))-1,0)) 

整個查詢可以

SELECT t.FileName, 
    RIGHT(t.[FileName],IIF(CHARINDEX('.',REVERSE(t.[FileName]))>0,CHARINDEX('.',REVERSE(t.[FileName]))-1,0)) AS Extension, 
    t.ComputerName, 
    t.KB 
FROM [UserProfile12_7-512-1mb] t; 

我不知道你如何創建你的觀點,但是這會給你的結果。

WITH ExtensionSheet AS (
    SELECT t.FileName, 
     RIGHT(t.[FileName],IIF(CHARINDEX('.',REVERSE(t.[FileName]))>0,CHARINDEX('.',REVERSE(t.[FileName]))-1,0)) AS Extension 
     t.ComputerName, 
     t.KB 
    FROM [UserProfile12_7-512-1mb] t 
) 
SELECT 
    e.Extension 
    , SUM(t1.KB) AS SUMOfKB 
FROM 
    ExtensionSheet e 
    JOIN [UserProfile12_7-512-1mb] t1 ON e.Extension=RIGHT(t1.[FileName],IIF(CHARINDEX('.',REVERSE(t1.[FileName]))>0,CHARINDEX('.',REVERSE(t1.[FileName]))-1,0)) 
GROUP BY 
    e.Extension; 

或者這個(如果你已經創建了視圖)。

SELECT 
    e.Extension 
    , SUM(t1.KB) AS SUMOfKB 
FROM 
    ExtensionSheet e 
    JOIN [UserProfile12_7-512-1mb] t1 ON e.Extension=RIGHT(t1.[FileName],IIF(CHARINDEX('.',REVERSE(t1.[FileName]))>0,CHARINDEX('.',REVERSE(t1.[FileName]))-1,0)) 
GROUP BY 
    e.Extension; 
+0

好吧,這很好,不,我怎麼做第二個查詢,加入? – dwhite

+1

@dwhite與你的連接查詢相同,應該可以工作 – monikapatel

+0

我感受到 Msg 8115,Level 16,State 2,Line 1 將表達式轉換爲數據類型爲int的算術溢出錯誤。 – dwhite