2013-10-19 4 views
0

stockadj1, 열 category.에는 여러 열 (예 : idno, name, category)이 있습니다. 하지만 중복 값 및 일부 기본 값을 가진 카테고리를 얻고 싶다면 또한 그것의 (테이블) 거기에 오면. 그래서 내가이PostgreSQL에서 효율적인 쿼리 작성

select 
    'Damages' as category 
union all 
select 
    'Excess Stock' as category 
union all 
select 
    'Shortage' as category 
union all 
select 
    'Stock Journal' as category 
union all 
select 
    distinct category 
from 
    stockadj1 
where 
    category <> '' 
    and lower(category) not in ('damages', 'excess stock', 'shortage', 'stock journal') 
order by 
    category 

같은 쿼리를 작성 기본값은

'Damages', 'Excess Stock', 'Shortage', 'Stock Journal' 

은 그 기본 값이 너무과 같이 사용하고 쿼리 와야합니다. 그러나 나는 그것의 꽤 많은 일을 생각한다. 효율적인 (실현 가능한) 솔루션을 얻는 방법?

EDIT 여기

기본값 어쩌면 테이블 존재 여부를 그 값을 의미한다.

내가 비록 비효율적 지저분하고 조금 허약했다 언급하지 않았다

+0

이전에 재고 관리를 한 적 없습니까? 나는 그가 무엇을 곧바로 요구하는지 알았다. : –

답변

2

확실하지 "의 꽤 많은 작업"하지만, 다음은 훨씬 덜 입력해야합니다

select category 
from stockadj1 
where category <> '' 
union 
values ('Damages'), 
     ('Excess Stock'), 
     ('Shortage') 
     ('Stock Journal') 
order by category; 

union 확인 중복 제거, 그렇게 할 필요가 없습니다 것을 전체적인 결과에서 뚜렷한 것.

0

PostgreSQL의 버전 9.0.3을 사용하고 있습니다.

카테고리 테이블을 아직 작성하지 않은 경우 작성하십시오. 그들 모두가 기본값이 있다면 그것은 노동 조합은 일련의 동작을 그대로

select Category from Categories Where IsDefault = 1 
Union 
select category from stockadj1 where category <> '' 

는 별개을 필요가 없습니다 단순 노동 조합에게, 그것은 기본적으로입니다 표시하는 열을 추가합니다.

나머지 부분을 살펴보면 category_id로 정규화하는 것이 좋을 것입니다. 일부 사무실 월계관에서 초과 재고가 초과 재고 여야한다고 말하면 나쁜 장소에있을 것입니다.

그럼 유니온은 필요 없겠지만, 모든 것이 카테고리 테이블에서 나옵니다.

자유 형식이거나 카테고리에서 선택해야하는 카테고리가 필요한 경우 다른 카테고리 ID를 추가하고 주식 조정, ID 및 카테고리 설명의 두 필드가 있어야합니다. catgeory_id가 다른 경우에만 설명을 입력하십시오.

select Category from Categories Where IsDefault = 1 
Union 
select category_description from stockadj1 s 
Inner join Categories c On c.Category_id = s.Category_Id 
Where c.Category_type = 'Other' 

Category_type은 '기타'유형임을 나타내며 이러한 종류의 동작이 필요합니다.

작업을 멋지게 수행하고 범주 테이블을 변경하여 99 %를 유지해야합니다. 당신이 무슨 뜻인지

+0

답장을 보내 주셔서 감사합니다 .statadj1 테이블에 mutilple 열이 있으므로 처음에는 기본값을 추가 할 수 없습니다. 최종 사용자는 기본값을 선택하고 백엔드에만 삽입합니다. 그런 다음 쿼리와 비슷하게 작성했습니다. 그는 어떻게 효율적으로 쿼리를 변경하는 방법을 말해주십시오 – Sathish

+0

"카테고리"? 테이블 이름은 단 하나이어야합니다 – CompanyDroneFromSector7G

+0

@SATSON, 첫 번째 쿼리 카테고리 (ies) 테이블은 사용자가 요청한 것을 수행합니다. 나머지 의견은 무엇인지 알지 못합니다.나머지 답변에서 언급했듯이 실제 문제는 스키마가 비효율적이므로 쿼리가 비효율적 일 것입니다. –