2009-09-04 10 views
1

나는값에 따라 반환되는 열을 어떻게 제한 할 수 있습니까?

index customer_number ABC CWD ROE BEE 
1     1 0 0 0 1 

과 같은 테이블을 가지고 있고,이 경우에는 'BEE'

내가 SHOW FIELDS에 의해 내가 이름을 얻을 수 있다는 것을 발견을 값 1에만 필드 이름을 반환하려면 필드는 어떻게 표시합니까? 필드 값 = 1 인 필드 이름을 표시하는 방법은 무엇입니까?

+0

+1 코드의 과다없이 할 수 있는지 궁금 해서요. – Mayo

+1

그건 SQL이하는 것이 아닙니다. 직업에 대한 잘못된 도구. – skaffman

+0

'은 MySQL을 사용하는 것이 수치 스럽거나 SQL Server에서 pivot/unpivot 연산자를 사용할 수있었습니다. 그러나 진지하게, 왜 당신은 데이터베이스 측에서 이것을하고 싶습니까? – Eric

답변

0

일반적인 방법으로는이 작업을 수행 할 수 없습니다.

select index, customer_number, decode (ABC, 1, "ABC", null) || decode (CWD, 1, "CWD", null) || decode (ROE, 1, "ROE", null) || decode (BEE, 1, "BEE", null) from aTable 

그것은 값이 하나에 해당 각 항목에 대한 열 이름을 표시합니다

은 당신이 할 수있는 것은이 같은 SQL 문을 작성합니다. 오라클 SQL이므로 다른 rdbms를 사용하면 구문이 달라집니다.

0

답을 맞추기 위해 CASE 문을 사용하는 것이 각 열에 하나씩 있습니다. 예 :

SELECT CASE WHEN index=1 THEN "index" ELSE "no_index" END as i, 
     CASE WHEN customer=1 THEN "customer" ELSE "no_customer" END as c, 
     CASE WHEN ... 
1

여기에 CASE 문을 사용합니다.

SELECT 
    index, customer_number, 
    CASE 
    WHEN abc=0 THEN 'abc' 
    WHEN cwd=0 THEN 'cwd' 
    END 
FROM 
    table_name 
0

이것은 SQL이 실제로 의도 한 것이 아니며 응용 프로그램 논리를 사용하는 것이 좋습니다.

  1. 이 행을 얻고 필드가 설정되는 결정 : 당신이 정말로 그것을 원한다면

    말했다 즉, 당신은 아마 임시 테이블과 SPROC을 포함해야합니다.

  2. 해당 정보를 사용하여 설정된 필드 만 사용하여 임시 테이블을 만듭니다.
  3. 해당 임시 테이블에 데이터를 삽입 한 다음 거기에서 행을 선택하십시오.

몇 줄의 응용 프로그램 코드 만 바꾸면 엄청난 혼란을 겪을 수 있습니다. 아마도 그만한 가치는 없습니다.

+0

동료들은 SQL 논리가 아닌 응용 프로그램 논리를 사용하여이 방법을 시도하는 것이 나에게 똑같다고 말했습니다. –

관련 문제