2017-07-23 51 views
0

我有我的表DDL和數據是這樣的:更新一個從另一列基於SQL Server中不同的情況下

create TABLE #TEMP_STATE 
(
    ID [char](20) NOT NULL, 
    [STATE] [char] (20) not null, 
    TELEphonh [char](20) NULL, 
    TELEPHONW [char](14) NULL, 
    dp [char](8) null, 
    pp [char](8) null, 
    Cid [char](16) null 
) 

enter image description here

我想實現如下:

  • 情況1:當「PP」爲空時,檢查「狀態」列,如果「狀態」列沒有「單元格」或「C」或「M」,則將「狀態」列值移動到「PP」

  • 情況2:當「狀態」列中具有「小區」,並且如果「TELEPHONW」級聯的數是空白的,然後移動「狀態」的列的值,以「TELEPHONW」

  • 情況3:當「國家」一欄有串連了一些‘細胞’,如果‘TELEPHONH’是空白的,然後將‘國家’列的值改爲‘TELEPHONH’

注意State列可以是數據後空白移動到其他相應的列

這樣,輸出應該是這樣的:

enter image description here

我想這樣的代碼:

update #TEMP_STATE 
set TELEPHONH = CASE 
    WHEN TELEPHONH like '' and TELEPHONW like '' and 
    PATINDEX('%cell%',SUBSTRING([STATE],NULLIF(PATINDEX('%cell%', [STATE] 
),0),LEN([STATE])-1)) > 0 
      THEN TELEPHONH = [STATE] ELSE [STATE] END, 
    WHEN TELEPHONH like '' and TELEPHONW like '' and PATINDEX('% 
(C)%',SUBSTRING([STATE],NULLIF(PATINDEX('%(C)%', [STATE] 
),0),LEN([STATE])-1)) > 0 
      THEN TELEPHONH = [STATE] ELSE [STATE] END 
FROM #TEMP_STATE 

希望我已經解釋正確此。 但是,我收到語法錯誤?我能否在案件中爲其分配一列值?

有沒有其他方法可以達到預期效果?謝謝。

+0

DP的條件是什麼?你是隻在尋找1個更新語句還是多個更新都沒問題? –

+0

嘗試將'Like'''更改爲'IS NULL'。 –

回答

0

我爲你制定了前兩種情況,但在第三種情況下感到困惑。你可以用你的邏輯來處理第三種情況,然後按照前兩種方法進行處理。對於前兩種情況,我在列ppTELEPHONW上計算出邏輯,然後將相同的邏輯放入STATE列。

區別在於當ppTELEPHONW列的邏輯爲真時,值將爲STATE。當STATE列中的邏輯爲真時,該值將爲空。

希望這會有所幫助。這裏是SQL Fiddle

UPDATE #TEMP_STATE 
SET [STATE] = CASE WHEN (pp IS NULL OR pp = '') AND 
        (CHARINDEX('C',[STATE]) = 0 AND 
        CHARINDEX('M',[STATE]) = 0) THEN '' 
       WHEN (TELEPHONW IS NULL OR TELEPHONW = '') AND 
        CHARINDEX('CELL',[STATE]) > 0 AND 
        LEN([STATE]) > 4 THEN '' 
       --Logic for 3rd condition here 
       ELSE [STATE] END, 
    TELEPHONW = CASE WHEN (TELEPHONW IS NULL OR TELEPHONW = '') AND 
        CHARINDEX('CELL',[STATE]) > 0 AND 
        LEN([STATE]) > 4 
        THEN [STATE] ELSE TELEPHONW END, 
     pp = CASE WHEN (pp IS NULL OR pp = '') AND 
      (CHARINDEX('C',[STATE]) = 0 AND 
      CHARINDEX('M',[STATE]) = 0) 
      THEN [STATE] ELSE pp END 
+0

您也可以忽略第一個CASE中的「單元格」,因爲它也會被「C」覆蓋。 –

+0

@ChesterLim,你是對的。我更新了代碼。謝謝! – Jason

相關問題