2017-01-14 64 views
3

我會說明我的問題:SQL:選擇哪一列匹配

看看有兩列的表:Col1和Col2。

----------------- 
| Col1 | Col2 | 
----------------- 
| 1a1 | 2b2 | 
----------------- 
| 11b | 22a | 
----------------- 

我想選擇包含在其中任何一列的a值。

所需的輸出將是:

------------ 
| MyNewCol | 
------------ 
| 1a1  | 
------------ 
| 22a  | 
------------ 

預先感謝您的寶貴時間。

回答

2
select col1 as newCol 
from your_table 
where charindex('a', col1) > 0 
union all 
select col2 
from your_table 
where charindex('a', col2) > 0 
+0

哇......我把頭撞在牆上一個小時,你在幾秒鐘內就能看到它!完美的作品,謝謝! – Stack

1

試試這個:

SELECT col1 AS output_col 
FROM your_table 
WHERE CHARINDEX('a', col1, 1) > 0 
UNION ALL 
SELECT col2 
FROM your_table 
WHERE CHARINDEX('a', col2, 1) > 0 

它發現其中任一值包含 'a' 和ALL執行UNION記錄。如果列數超過2列,則可能需要採用不同的方法,因爲擁有大量UNION可能會導致性能問題。

+0

謝謝bbrumm。我會接受juergen的回答,僅僅是因爲他幾秒鐘就打敗了你。 – Stack

1

您可以使用UNION ALL語句

SELECT [Col1] as MyNewCol FROM [Table] where Col1 like '%a%' 
UNION ALL 
SELECT [Col2] as MyNewCol FROM [Table] WHERE Col2 like '%a%' 

或UNION如果你需要不同的結果

+0

在生產表中,我實際上使用'LIKE'%a%'。 'UNION ALL'是我偶然發現的地方,你們都做對了。感謝Vasyl。 – Stack

1

我想這一點使用CROSS APPLY做只是需要單個表掃描

SELECT MyNewCol 
FROM Yourtable 
     CROSS apply(SELECT Col1 
        WHERE [Col1] LIKE '%a%' 
        UNION ALL 
        SELECT Col2 
        WHERE [Col2] LIKE '%a%') cs (MyNewCol)