2010-07-09 7 views
4

보기 (저장 프로 시저 아님)을 만들 수 있습니까? 다른 테이블을 기반으로하는 동적 열 이름이 있습니까? 예를 들어 :동적 열 이름

Code: 
CodeId|Description 
------------------ 
    1|Title 
    2|Notes 

Data: 
DataId|Content|CodeId|GroupId 
----------------------------- 
    1|Title1 |  1|  1 
    2|Note1 |  2|  1 
    3|Title2 |  1|  2 
    4|Note2 |  2|  2 

Select Result: 
GroupId|Title |Notes 
------------------- 
     1|Title1|Note1 
     2|Title2|Note2 

열 이름 "제목"와 "주의"는 Code 테이블에서 올 것입니다. 나는 대답이 '아니오'라고 생각하고 있지만 확인하고 싶습니다. 감사!

편집 : 나는 이것이 "위험 할 수있다"는 것을 이해합니다. 누군가가 코드 설명을 갱신하면보기가 변경되어 열 이름에 종속 된 SQL이 깨집니다. 이 경우 대신 CodeId를 사용할 수 있습니다.이 변경은 허용되지 않습니다.

+0

이것은 깔끔한 질문입니다! – mattruma

답변

1

EAV (Entity-Attribute-Value) 모델의 위험은 매우 많으며, 앞으로도 많은 어려움을 겪을 것입니다. 그렇게 말하면, 당신의 구체적인 질문이 나에게 해결 될 수있을 것 같습니다. 그래도 경고를 받았습니다 ...

코드 테이블에 트리거를 삽입하면됩니다. 누군가가 테이블의 행 중 하나를 추가, h 제 또는 갱신 할 때마다 트리거는 올 Y 른 명령문으로 뷰를 다시 작성해야합니다.

+0

나는 많은 위험이 있다는 것에 전적으로 동의한다. 나는 방아쇠 +보기 아이디어를 재현하는 것이 "좋은"대답에 가장 가깝다고 생각합니다. –

1

나는 첫 번째 행이 반환 한 모든 열 헤더가있는 곳에서 뭔가를 할 수 있다고 생각했습니다. 약간 까다로울 것입니다. UNION에서는 성능에 문제가있을 것입니다.하지만 실행 가능합니다.

+0

흥미 롭다. 나는 그것에 대해 생각하지 않았다. 또한 CodeId가 (종속 쿼리의 어려움으로 인해) 변경이 허용되지 않는다면 실제로, 미리 컬럼이 어떤 것인지를 이미 알고 있다는 것을 알고있었습니다. 이 경우 각 열에 대해 여러 subselect를 수행하거나 그룹에 대한 CTE와 각 열에 대한 조인을 사용할 수 있습니다. 동적 열이 가져올 수있는 고통이 각 열을 지정하지 않는 것을 보완 할 수 있을지 확신하지 못합니다. –

1

Java 또는 C 또는 데이터베이스의 값을 사용하여 "보기 만들기"문을 동적으로 작성한 다음 프로그램을 작성할 수 있습니다.

SQL 문으로 만 수행 할 방법을 찾고 있다면 그 대답은 "할 수 없다"는 것에 동의하지만 사람들이 항상 올라오고 있기 때문에 그런 진술을하기를 꺼립니다. 내가 생각해 본 적이없는 뭔가를하는 영리한 방법.

+0

많은 열과 많은 유사한 뷰를 만들지 않는 한보기를 만드는 프로그램을 작성하는 데 더 오래 걸릴 수 있습니다. :) 가능하다면 이것이 나쁜 생각이 될 수있는 많은 이유를 생각할 수 있습니다. 우리보다 더 영리한 사람이 있는지 알게 될 것입니다. –

+0

2 ~ 3 개의 뷰를 만들고 싶다면 뷰를 손으로 만 만들면됩니다. 백 가지가 있거나 열 세트가 알려지지 않은 경우 프로그램을 작성합니다. 나는 그런 일을 할 필요가 있다고 말할 수 없다. – Jay