2014-12-22 29 views
0

我的SQL技能是初學者到中級,所以我在這裏檢查是否需要幫助完成此項目。我不是要你給我我需要的代碼,但任何幫助指向我在正確的方向將不勝感激。創建一個動態視圖,其中包含來自說明列的可變子串數據的臨時列

我正在使用SQL Server 2008 R2並需要創建一個視圖。該視圖將是表tblDataHistory。該表由5列組成(只需要3個視圖)。

它們如下。

-HistoryEventID (autonumber) - not needed 
-ExecutionID (int) - Needed 
-EventTypeID (int) - not needed 
-Timestamp (datetime) - needed 
-Description (varchar(max)) - needed 

的視圖需要僅保持那些3列流程id,時間戳,&說明。它將需要一個更多的列,這是我在執行過程中丟失了一點的地方。我需要在「描述」列中查找一些關鍵字詞組,如果它存在於該行中,則用該短語填充第4列。是

詞我要尋找如下

-"Conversations" 
-"Error" 
-"Failed" 
-"On Behalf Of" 
-"Acted Upon" 
-"Approve" 
-"Delete" 
-"Route" 
-"Reject" 
-"Release" 
-"Duplicate" 
-"Restart" 
-"Send" 
-"Submit" 
-"Comment" 
-"Conversation" 
-"Attach" 
-"Redaction" 
-"Matched" 
-"Return to Start" 
-"Print" 
-"Started" 
-"Ended" 
-"Saved" 
-"Backfill" 
-"Reassign" 
-"Note" 
-"Action Button" 
-"Priority" 
-"Completed" 

基本上我需要創建和使用取決於是否說明列包含詞組那些關鍵短語填充的最後一列。

這似乎應該很容易做,但我似乎沒有找到任何適用於我的情況的簡單解決方案。有關從哪裏開始的建議?

回答

0

與一些同事合作後,我們想出瞭解決方案。首先,我們「關心」的關鍵詞太多,因此我們縮減了列表。即便如此,我們仍然可以保留這個列表,並且讓這個腳本更長。創建一個視圖,在填充視圖的select語句中,我們使用case語句和通配符來查找我們正在查找的字符塊,並根據描述中的數據填充其他列。這是選擇聲明

SELECT HistoryEventID, ExecutionID, EventTypeID, Timestamp, Description, 
        CASE WHEN [DESCRIPTION] LIKE '%Invoice Approval started%' THEN 'STARTED' WHEN [DESCRIPTION] LIKE '%acted upon the document with the command%' AND 
        [DESCRIPTION] LIKE '%Submit.%' THEN 'SUBMITTED' WHEN [DESCRIPTION] LIKE '%on behalf of%' AND [DESCRIPTION] LIKE '%clicked the action button %' AND 
        [DESCRIPTION] LIKE '%Submit%' THEN 'SUBMITTED' WHEN [DESCRIPTION] LIKE '%acted upon the document with the command%' AND 
        [DESCRIPTION] LIKE '%Send to AP.%' THEN 'SENDTOAP' WHEN [DESCRIPTION] LIKE '%on behalf of%' AND [DESCRIPTION] LIKE '%clicked the action button %' AND 
        [DESCRIPTION] LIKE '%Send to AP.%' THEN 'SENDTOAP' WHEN [DESCRIPTION] LIKE '%acted upon the document with the command%' AND 
        [DESCRIPTION] LIKE '%Release to GP.%' THEN 'RELEASED' WHEN [DESCRIPTION] LIKE '%on behalf of%' AND [DESCRIPTION] LIKE '%clicked the action button %' AND 
        [DESCRIPTION] LIKE '%Release to GP.%' THEN 'RELEASED' WHEN [DESCRIPTION] LIKE '%acted upon the document with the command%' AND 
        [DESCRIPTION] LIKE '%Reject.%' THEN 'REJECTED' WHEN [DESCRIPTION] LIKE '%on behalf of%' AND [DESCRIPTION] LIKE '%clicked the action button %' AND 
        [DESCRIPTION] LIKE '%Reject%' THEN 'REJECTED' WHEN [DESCRIPTION] LIKE '%acted upon the document with the command%' AND 
        [DESCRIPTION] LIKE '%Route.%' THEN 'ROUTED' WHEN [DESCRIPTION] LIKE '%on behalf of%' AND [DESCRIPTION] LIKE '%clicked the action button %' AND 
        [DESCRIPTION] LIKE '%Route%' THEN 'ROUTED' WHEN [DESCRIPTION] LIKE '%acted upon the document with the command%' AND 
        [DESCRIPTION] LIKE '%Approve.%' THEN 'APPROVED' WHEN [DESCRIPTION] LIKE '%on behalf of%' AND [DESCRIPTION] LIKE '%clicked the action button %' AND 
        [DESCRIPTION] LIKE '%APPROVE%' THEN 'APPROVED' WHEN [DESCRIPTION] LIKE '%acted upon the document with the command%' AND 
        [DESCRIPTION] LIKE '%Restart Workflow.%' THEN 'RESTARTED' WHEN [DESCRIPTION] LIKE '%on behalf of%' AND [DESCRIPTION] LIKE '%clicked the action button %' AND 
        [DESCRIPTION] LIKE '%Restart%' THEN 'RESTARTED' WHEN [DESCRIPTION] LIKE 'Invoice Approval ended.%' THEN 'ENDED' ELSE '' END AS TYPE, 
        CASE WHEN [DESCRIPTION] LIKE '%Invoice Approval started%' THEN 'SYSTEM' WHEN [DESCRIPTION] LIKE '%Invoice Approval ended%' THEN 'SYSTEM' WHEN [DESCRIPTION] 
        LIKE '%(symetra\%' THEN SUBSTRING(Description, (CHARINDEX('symetra\', Description)) + 8, 6) ELSE '' END AS [USER], 
        CASE WHEN [DESCRIPTION] LIKE '%on behalf of%' THEN 'YES' ELSE '' END AS IMPERSONATED, 
        CASE WHEN [DESCRIPTION] LIKE '%on behalf of%' THEN SUBSTRING(Description, (CHARINDEX('symetra\', Description, CHARINDEX('on behalf of', Description))) + 8, 6) 
        ELSE '' END AS IMPERSONATED_USERID 
FROM  Data_HistoryEvents 

我相信這可以做得更優雅,但這個工作,所以我們去了。

1

首先創建關鍵字的表,也許如下:

CREATE TABLE keyphrases (keyPhrase VARCHAR(100)) 
INSERT keyphrases VALUES ('Conversations') 
INSERT keyphrases VALUES ('Error') 
INSERT keyphrases VALUES ('Failed') 
INSERT keyphrases VALUES ('On Behalf Of')...etc 
在你看來

然後,左連接新表與LIKE操作查詢:

SELECT 
    DH.ExecutionID, 
    DH.Timestamp, 
    DH.Description, 
    K.keyPhrase AS MatchedKeyPhrase 
FROM 
    tblDataHistory DH 
    LEFT JOIN keyphrases K ON DH.[Description] LIKE '%' + K.keyPhrase + '%' 

如果您只想包含匹配的行,然後將LEFT JOIN更改爲JOIN。

請注意,這些是昂貴的連接類型。明智地使用它們。儘量縮短關鍵短語表。

相關問題