의류품의 날짜(기간)별, 색상별, 사이즈별 매출액을 알려는 프로그램입니다.
SQL> desc cloth
이름 Null? 유형
------------------------------- -------- ----
DTE NOT NULL VARCHAR2(8) 일자
SIZE VARCHAR2(13) 사이즈
COLOR VARCHAR2(3) 색상
SALEAMT NUMBER(11) 판매액
사이즈는 00000000001xx 이면 x-small
00000000002xx small
00000000003xx medium
00000000004xx large
00000000005xx x-large
(xx는 숫자2자리가 랜덤)
- 쿼리문장 -
select
decode(color, '100', 'green',
'200', 'red',
'300', 'blue',
'400', 'orange',
'500', 'yellow',
'600', 'brown','err'),
decode(substr(size, 11, 1), '1', 'x-small',
'2', 'small',
'3', 'medium',
'4', 'large',
'5', 'x-large','err'), sum(saleamt)
from cloth
where dte >= '20020901' and dte <= '20020930'
group by color, substr(size, 11, 1)
union
select decode(color, '100', 'green',
'200', 'red',
'300', 'blue',
'400', 'orange',
'500', 'yellow',
'600', 'brown','err'),
'합계', sum(saleamt) from cloth
where dte >= '20020901' and dte <= '20020930'
group by color
- 결과값 -
DECODE(C DECODE(SUBST SUM(SALEAMT)
--------- --------------- ---------------
green x-small 5132570
green small 1621610
green medium 363290
green large 714180
green x-large 582320
green 합계 8413970
red x-small 4911300
red small 1400900
red medium 684000
red large 767800
red x-large 1257900
red 합계 9021900
blue x-small 3300000
blue small 651500
blue medium 185300
blue large 520000
blue x-large 1439000
blue 합계 6095800
orange x-small 4405200
orange small 1062200
orange medium 951100
orange large 842050
orange x-large 946500
orange 합계 8207050
yellow x-small 0
yellow 합계 0
brown x-small 100000
brown 합계 100000
오라클 DB를 이용하는데요..
다음과 같은 결과값을 DBGrid로 출력하고자 할 때
필드명이 Color와 Saleamt는 필드가 존재하므로 Editing BGrid1.Columns 에서 추가하거나 부를수가 있는데 구분값인 Size는 어떻게 불러야 합니까?
만약 DBGrid로 불가능하다면 어떤 방법을 써야 화면 출력이 가능할지 알고
싶습니다.
데이터베이스에 있는 cloth라는 테이블에서 자료를 가지고와서 델파이상의 화면에서 보여주려 합니다.
color와 saleamt은 테이블에 필드명이 있지만 구분은 필드명이 있는 것이 아니거든요..
size라는 필드명은 13자리로 되어있는데 00000000001xx, 00000000002xx, 00000000003xx과
같이 구성이 되어있어서 서브스트링으로 숫자열 가운데서 0이 아닌 첫 번째 숫자를 떼어와서 그것으로 구분을 했습니다. 이렇게 나온 결과값으로 디비그리드에 대입시킬수 있나요?
아니면 다른 방법을 써야 합니까?
디비그리드는 필드명이 있어야만 보여줄수 있지 않나요?
화면으로 일단 출력이라도 되었으면 좋겠네요... 읽어주셔서 감사합니다.
decode(color, '100', 'green',
'200', 'red',
'300', 'blue',
'400', 'orange',
'500', 'yellow',
'600', 'brown','err') COLOR,
decode(substr(size, 11, 1), '1', 'x-small',
'2', 'small',
'3', 'medium',
'4', 'large',
'5', 'x-large','err') SIZE,
sum(saleamt) SUM
from cloth
where dte >= '20020901' and dte <= '20020930'
ALIAS를 주시면 될거 같은데요..........
select color AA from cloth
나중에 query1.fieldbyname('AA').AsString 식을 값을 사용할수도 있고요
컬럼에디트 상에서도 기존에 나와있는 걸 모두 삭제후 다시 불러오시면
AA가 로드 될거 같은데요...
테스트를 안해봤지만 될거 같은 생각이 듭니다....도움이 되시길..