2017-05-07 73 views
0

我有以下SQL代碼:遍歷列名

Declare @TestOne NVARCHAR(80) 
Set @TestOne = 'olg.FIRST_NAME' 


Select transaction_id,first_name, LAST_NAME, joint_first_name, 
joint_last_name, honoree_first_name, honoree_last_name, 

    CASE WHEN olg.FIRST_NAME LIKE '% and %' THEN '1' ELSE '0' END+ 
    CASE WHEN olg.FIRST_NAME LIKE '% & %' THEN '1' ELSE '0' END+ 
    CASE WHEN olg.FIRST_NAME LIKE '% '' %' THEN '1' ELSE '0' END+ 
    CASE WHEN olg.FIRST_NAME LIKE '% , %' THEN '1' ELSE '0' END+ 
    CASE WHEN olg.FIRST_NAME LIKE '%. %' THEN '1' ELSE '0' END+ 
    CASE WHEN olg.FIRST_NAME LIKE '%Inc%' THEN '1' ELSE '0' END+ 
    CASE WHEN olg.FIRST_NAME LIKE '%foundation%' THEN '1' ELSE '0' END+ 
    CASE WHEN olg.FIRST_NAME LIKE '%Trust%' THEN '1' ELSE '0' END 
    AS CKLName 
from [dbo].OnlineGivingDailyLoad as olg 

什麼,我想要做的就是使用認爲,我要檢查其他8列的名稱的變量上述CASE語句中的任何字符。什麼,我不想要重複上面的CASE語句八(8)時間,必須檢查這些'字符串'的其他列的名稱是否有一種方式就像在C++中,你有一個計數器該循環遍歷x次,並同時更改一個字符串數組(列名)以檢查上述case語句中的子字符串?上面的變量在用於替換列名時不會生成結果。

回答

0

如果你能忍受有這些在單獨的行,而不是單獨的列中,您可以使用apply

select colname, 
     (CASE WHEN col LIKE '% and %' THEN '1' ELSE '0' END + 
     CASE WHEN col LIKE '% & %' THEN '1' ELSE '0' END + 
     CASE WHEN col LIKE '% '' %' THEN '1' ELSE '0' END + 
     CASE WHEN col LIKE '% , %' THEN '1' ELSE '0' END + 
     CASE WHEN col LIKE '%. %' THEN '1' ELSE '0' END + 
     CASE WHEN col LIKE '%Inc%' THEN '1' ELSE '0' END + 
     CASE WHEN col LIKE '%foundation%' THEN '1' ELSE '0' END + 
     CASE WHEN col LIKE '%Trust%' THEN '1' ELSE '0' END 
     ) as colcheck 
from [dbo].OnlineGivingDailyLoad olg cross apply 
    (values ('first_name', olg.first_name), 
      ('last_name', olg.last_name), 
      . . . 
    ) v(colname, col); 

您可以pivot或使用條件聚合得到的值回一行,如果那是什麼你真的想要。