2009-10-14 5 views
9

SQL Server의 쿼리에서 다른 열 이름의 값을 기반으로 별칭 이름을 표시하려고합니다. 예 :SQL 문의 동적 별칭

SELECT P.Amount AS (CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END) 
    FROM Person P 

나는 위와 같은 것이 옳지 않다는 것을 알고 있지만, 이와 같은 것이 도움이 될 것입니다.

답변

12

추가 할 수 있는지 확실하지 않습니다. 동적 별칭을 사용할 수 있지만 다음과 같이 할 수 있습니다 (별칭이 몇 개만있는 경우).

SELECT 
    CASE P.Type WHEN 'Individual' THEN P.Amount ELSE NULL END AS Salary, 
    CASE P.Type WHEN 'Individual' THEN NULL ELSE P.Amount END AS Profit 
FROM 
    Person p 
+0

+1 좋은 지점, 이것은 실제로 그가 한 일을 할 수 있습니다. 생각하지 않았어. –

+0

감사합니다. 이것은 분명히 내가 얻을 수있는 가장 가까운 거래입니다. –

1

"금액"으로 금액을 반환 한 다음 해당 금액의 "유형"이 포함 된 추가 열을 반환해야합니다.

i.e.g는

SELECT P.Amount, CASE P.Type WHEN 'Individual' THEN 'Salary' ELSE 'Profit' END AS AmountType 
FROM Person P 
2

은 "별칭"이름은 반환되는 데이터의 전체 컬럼의 이름입니다. 이것이 행 단위로 변경하는 것은 불가능합니다.

동적으로 열 이름 (별칭)을 변경할 수있는 유일한 방법은 동적 SQL을 사용하여 쿼리를 작성하는 것입니다. 그러나 이것은 당신이하고 싶은 것으로 보이지 않습니다.

SQL 없음이 할 수있는

+2

그리고 동적 SQL조차도 전체 지정된 쿼리의 별칭에 대해 하나의 이름 만 선택할 수 있습니다. – mjv

1

은 ... 은 각 열 당 하나의 이름/별명을 가질 수 recorset을 반환합니다.
쿼리에서 반환 한 일부 레코드가 '개인'이고 일부는 다른 형식 인 경우 어떤 이름을 선택하겠습니까?

물론 여러 응답에서 제안한 것처럼 쿼리에서 반환하는 열의 수를 수정하고 각 열의 이름을 원하는대로 지정하고 추가 논리가 필요할 수있는 결과 집합을 처리 할 수 ​​있습니다. 추가 로직을 원한다면 Amount와 Type을 모두 선택하여 애플리케이션의 레벨에서 속성 명명과 같은 값을 처리 할 수 ​​있습니다 ...

0

열은 단 하나의 이름 만 가질 수 있습니다. 행 집합에 행이 하나만 포함 된 경우 행의 Type 열을 먼저 살펴본 다음 선택 항목에 대해 열 이름을 적절히 변경할 수 있습니다. 여러 행이 포함 된 경우 단순히 불가능합니다.

IF 1 = (SELECT COUNT(*) FROM Person P WHERE <where-criteria>) THEN 
    IF 'Individual' = (SELECT P.Type FROM Person P WHERE <where-criteria>) THEN 
     SELECT P.Amount AS Salary 
     FROM Person P 
     WHERE <where-criteria> 
    ELSE 
     SELECT P.Amount AS Profit 
     FROM Person P 
     WHERE <where-criteria> 
    END IF 
ELSE 
    SELECT P.Amount AS SalaryOrProfit 
    FROM Person P 
    WHERE <where-criteria> 
END IF 

디자인을 다시 검토해야 할 수도 있습니다.