2017-01-14 13 views
3

問題を説明します:SQL:いずれかの列が一致する場所を選択

Col1とCol2という2つの列を持つ表を見てください。

----------------- 
| 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

うわー...私は1時間壁に頭を突きつけて、あなたはそれを数秒で考え出す!完璧に動作します、ありがとう! – 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' を含んでおり、UNION ALLを行い、いずれかのレコードを検索します。 2つ以上の列がある場合、UNIONの多くがパフォーマンスの問題を引き起こす可能性があるため、別のアプローチが必要になることがあります。

+0

ありがとうbbrumm。彼が数秒であなたを倒したからといって、私はジューゲンの答えを受け入れるでしょう。 – Stack

1

あなたは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) 
  • を必要とUNIONを使用することができますLive Demo
関連する問題