2009-02-02 6 views
12

여러 문자열 값을 단일 문자열 값으로 바꿔야하는 SQL 쿼리를 SQL Server에 작성하고 있습니다. 예를SQL 쿼리에서 여러 문자열 바꾸기

를 들어
Product  Quantity 
-------  -------- 
Apple  2 
Orange  3 
Banana  1 
Vegetable 7 
Dairy  6 

내가이 작업을 수행하는 방법을 알고있는 유일한 방법은이 SELECT 절에 REPLACE 중첩 사용하는 것입니다

Product  Quantity 
-------  -------- 
Fruit  2 
Fruit  3 
Fruit  1 
Vegetable 7 
Dairy  6 

될 것입니다.

SELECT 
    REPLACE('Banana', REPLACE('Orange', REPLACE('Banana', Product, 'Fruit'), 
      'Fruit'), 'Fruit') AS Product 
FROM 
    Table 

더 쉬운 방법이 있습니까?

편집 : 제품 범주에 다른 값이있을 수 있습니다. 위의 편집 된 예제를 참조하십시오. 언급 된 것보다 다른 제품이없는 경우

답변

20

BradC 지금까지 가장 좋은 대답을 가지고 있지만, 경우에 당신은 어떤 이유로 내가 Kibbee의 대답의 적응 게시하고 싶었 추가 테이블을 만들 수 없습니다 :

SELECT 
    CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit' 
    ELSE Product END 
FROM [Table] 
+0

이것은 내가 가져온 데이터베이스가 아카이브이기 때문에 제 목적에 가장 잘 맞을 것입니다. 그렇지 않으면 범주 열을 추가하는 것이 좋습니다. 감사! –

+0

그는 약간의 조회 테이블을 추가하는 것에 대해 이야기하고 있습니다. 아카이브 db의 경우에도 마찬가지입니다. –

1

당신은 할 수 : 다른 제품이있는 경우

SELECT 'Fruit' AS Product, 
     Quantity 
FROM Table 

가 나타나서 절

WHERE Product IN ('Banana', 'Orange', 'Apple') 
7
Select 
Case Product WHEN 'Banana' Then 'Fruit' 
WHEN 'Apple' Then 'Fruit' 
WHEN 'Orange' Then 'Fruit' 
ELSE Product 
END 
FROM Table 
+0

이 도움이됩니다 예를 들어

이 링크를 확인하십시오. 감사. –

11

새로운 "범주"를 확인 WHERE a를 귀하의 제품 목록과 그들이 속한 "카테고리"가있는 테이블.

그런 다음 내부 결합을 수행하십시오.

+0

내가 제일 먼저 생각한 것. – dotjoe

+2

+1 +1이 방법은 – SQLMenace

+0

입니다.이 방법은 읽기 전용 아카이브를 사용하지 않는 것이 좋은 해결책입니다. –

1

단일 열 'Product'열을 사용하여 임시 테이블을 만들고 교체 할 모든 제품 이름을 삽입 할 수 있습니다.

그런 다음 갱신 할 대상 테이블에 대해 내부 조인을 수행하십시오.

UPDATE 
    Table 
SET Product = 'Fruit' 
FROM 
    Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product 
0

작은 따옴표가 SQL에서 텍스트를 구분하기 :

CASE WHEN ShiptoPlant IN (';','/',' ') Then '' ELSE ShipToPlant END