2014-02-27 3 views
0

이 문제가 있습니다 : M 및 A로 시작하는 각 계획에 대해 3 개의 추가 문자를 추가하고 원본을 유지해야합니다. 예를 들어 : 또한, T로 시작하는 계획은 동일하게 유지해야concat 및 loop 함수

M_VA_K15CVA 
M_VA_M20CVA 
M_VA_T234 

내가이 파일을 무엇을 사용해야에

M_VA_K15CVA 
M_VA_K15CVA_V1 
M_VA_K15CVA_V2 
M_VA_K15CVA_V3 
M_VA_M20CVA 
M_VA_M20CVA_V1 
M_VA_M20CVA_V2 
M_VA_M20CVA_V3 
M_VA_TNT10-VA 

어떤 힌트를해야 하는가? 감사합니다.

+0

어떤 버전의 SQL Server가 있습니까? 이것은'ROW_NUMBER()'가 있다고 가정 할 때'CASE'와'ROW_NUMBER()'의 조합이 될 것입니다. – Yuck

+0

이것은 여러 데이터를 단일 필드로 연결해서는 안되며 각 열을 다른 열에 저장하고 프레젠테이션 시간에 다시 붙여야하는 이유를 보여주는 교과서 예제입니다. –

답변

0

JOIN 조건이 손실 된 파생 테이블로 조인을하면 목록을 더 큰 목록으로 확장 할 수 있습니다. 귀하의 질문에 "M"과 "K"를 의미하고 귀하의 예와 일치하지 않는 "M"과 "A"가 아니라고 가정 할 때 귀하의 요구를 충족시키는 코드가 있습니다.

DECLARE @Plans TABLE 
(
    PlanID varchar(50) 
); 
INSERT INTO @Plans (PlanID) VALUES ('M_VA_K15CVA'); 
INSERT INTO @Plans (PlanID) VALUES ('M_VA_M20CVA'); 
INSERT INTO @Plans (PlanID) VALUES ('M_VA_T234'); 

SELECT 
    CASE 
     WHEN RowValue IS NULL OR RowValue = 0 THEN 
      PlanID 
     ELSE 
      PlanID + '_V' + CONVERT(varchar,RowValue) 
    END AS NewPlanID 
FROM  @Plans 
LEFT JOIN (
       SELECT 0 AS RowValue 
       UNION ALL SELECT 1 
       UNION ALL SELECT 2 
       UNION ALL SELECT 3 
      ) AS RowExpander 
ON   RIGHT(LEFT(PlanID,6),1) IN ('M','K');