database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 6857 게시물 읽기
No. 6857
sql 포함관계에대한 함수? 혹은 비슷한것 에대해 알려주세요
작성자
초보
작성일
2006-10-13 17:18ⓒ
2006-10-13 17:19ⓜ
조회수
3,387

sql 포함관계에대한 함수? 혹은 비슷한것 에대해 알려주세요
    
출력대상 : 지역 코드, a_flag, b_flag, c_flag
    
가게 코드 지역 코드    a_flag    b_flag   c_flag
00001       001            TRUE    FALSE  FALSE
00002       001            FALSE  TRUE    FALSE
00003       001            FALSE  TRUE    FALSE
00004       001            FALSE  FALSE  FALSE
00005       001            FALSE  FALSE  FALSE
    
이럴경우 같은 지역코드를 가지고 있는 가게코드의 flag중 하나라도 true를 가지고 있다면 true를 표시 하고 싶습니다.
    
위의 DB를 기준으로 결과가    
지역 코드    a_flag    b_flag   c_flag 
 001            TRUE    TRUE   FALSE
처럼 나오게 하고 싶을때,어떤 방법이 있을까요?(가게코드 무시)
고수님 들의 한마디 기다리겠습니다.


이 글에 대한 댓글이 총 1건 있습니다.
nonun=# \d test1
           Table "public.test1"
 Column |         Type         | Modifiers
--------+----------------------+-----------
 gage   | character varying(5) |
 locate | character varying(3) |
 a_flag | boolean              |
 b_flag | boolean              |
 c_flag | boolean              |


nonun=# select
nonun-#  locate,
nonun-#  case when a_flag=1 then true else false end as a_flag,
nonun-#  case when b_flag=1 then true else false end as b_flag,
nonun-#  case when c_flag=1 then true else false end as c_flag
nonun-# from
nonun-#  (select
nonun(#   locate,
nonun(#   max(a_flag) as a_flag,
nonun(#   max(b_flag) as b_flag,
nonun(#   max(c_flag) as c_flag
nonun(#  from
nonun(#   (SELECT
nonun(#    locate,
nonun(#    case when a_flag is true then 1 else 0 end as a_flag,
nonun(#    case when b_flag is true then 1 else 0 end as b_flag,
nonun(#    case when c_flag is true then 1 else 0 end as c_flag
nonun(#   from test1)
nonun(#  as foo group by 1)
nonun-# as foo
nonun-# ;
 locate | a_flag | b_flag | c_flag
--------+--------+--------+--------
 001    | t      | t      | f
(1 row)



한줄로는
select locate, case when a_flag=1 then true else false end as a_flag, case when b_flag=1 then true else false end as b_flag, case when c_flag=1 then true else false end as c_flag from (select locate, max(a_flag) as a_flag, max(b_flag) as b_flag, max(c_flag) as c_flag from (SELECT locate, case when a_flag is true then 1 else 0 end as a_flag, case when b_flag is true then 1 else 0 end as b_flag, case when c_flag is true then 1 else 0 end as c_flag from test1) as foo group by 1) as foo

이고요
true 일 때는 1, false일 때는 0 으로 해서 max() 를 하면 true가 있을땐 항상 1이 나옵니다. 그럼 그걸 group by 해서 다시 case 로 true, false 로 바꿔주는 방식입니다~ 더 좋은 방법이 있을지도......

신기배(소타)님이 2006-10-14 15:06에 작성한 댓글입니다.
이 댓글은 2006-10-14 15:07에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
6863원거리 서버에 있는 특정 테이블 공유 가능할까요 ???? [4]
롱다리
2006-10-19
3573
6862db 필드명을 like 조건문으로 주려고 합니다. [1]
김태우
2006-10-17
3426
6861select 문에서 데이타베이스간 참조는 (cross_database reference)어떻게 하는지..예제 부탁드립니다. [1]
김승일
2006-10-17
3494
6857sql 포함관계에대한 함수? 혹은 비슷한것 에대해 알려주세요 [1]
초보
2006-10-13
3387
6854실행계획 한번 봐주세요. [4]
백수환
2006-10-13
4305
6853같은 테이블명이 2개씩 존재합니다..
star1533
2006-10-12
3333
6852이거 가능한가여.. [2]
조진우
2006-10-11
3589
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다