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
운영게시판
최근게시물
MS-SQL Q&A 6809 게시물 읽기
No. 6809
최저가격에 등급을 표시하고 싶습니다.
작성자
선이
작성일
2014-05-12 18:35ⓒ
2014-05-12 18:40ⓜ
조회수
8,252

안녕하세요.

품목명 가격 환산값 등급
품목1 20400 105  
품목2 19400 100  
품목3 24200 125  

품목에 대해서 가격과 가격에 대한 환산값을 가지고 있습니다.

환산값을 가지고 A,B,C,....등급을 표시하고 싶은데요.

등급의 범위가 다음과 같습니다.

A 0~100
B 101~110
C 111~120
D 121~130
E 131~140

이 등급을 어떻게 테이블로 구성해야할지 모르겠어요.

결과

품목1 204000 105 B
품목2 194000 100 A
품목3 242000 125 D

 

도와주세요.

이 글에 대한 댓글이 총 4건 있습니다.

WITH prd ( nm, prc, ev )

AS
(
SELECT '품1', 20400, 105
UNION ALL SELECT '품2', 19400, 100
UNION ALL SELECT '품3', 24200, 125
),
evr( rnk, evMin, evMax )
AS
(
SELECT 'A', 0, 100
UNION ALL SELECT 'B', 101, 110
UNION ALL SELECT 'C', 111, 120
UNION ALL SELECT 'D', 121, 130
UNION ALL SELECT 'E', 131, 140
)
SELECT prd.*, evr.rnk
FROM prd
INNER JOIN evr ON evr.evMin <= prd.ev AND prd.ev <= evr.evMax
;
우욱님이 2014-05-12 22:10에 작성한 댓글입니다. Edit

우욱님!!!!!

정말 감사합니다.

전 테이블구조부터 문의드려서 아무도 안도와주실줄 알았어요.

죄송하지만 추가적으로 한가지만 더 문의드릴께요.

만약 등급에 범위가 없이

A 100
B 110
C 120
D 130
E 140

이라면 불가능한거죠?

항상 즐거운 나날 보내시길 바랍니다.

선이님이 2014-05-13 17:00에 작성한 댓글입니다. Edit

-- 2012 공부한거 자랑하기 위한 버전이라면 LAG로 앞 값을 찾아도 되고요

-- 0이면 별도 CASE 절이 하나 더 필요는 하겠지만서도...
WITH prd ( nm, prc, ev )
AS
(
SELECT '품1', 20400, 105
UNION ALL SELECT '품2', 19400, 100
UNION ALL SELECT '품3', 24200, 125
),
evr( rnk, evMax )
AS
(
SELECT 'A', 100
UNION ALL SELECT 'B', 110
UNION ALL SELECT 'C', 120
UNION ALL SELECT 'D', 130
UNION ALL SELECT 'E', 140
)
SELECT prd.*, evr2.rnk
FROM prd
INNER JOIN (
SELECT rnk, LAG( evMax, 1, 0 )  OVER ( ORDER BY rnk ) AS evMin, evMax
FROM evr
) AS evr2 ON evr2.evMin < prd.ev AND prd.ev <= evr2.evMax
;
 
-- 2012가 아니면 걍 옛스럽게 만들어도 되지요
WITH prd ( nm, prc, ev )
AS
(
SELECT '품1', 20400, 105
UNION ALL SELECT '품2', 19400, 100
UNION ALL SELECT '품3', 24200, 125
),
evr( rnk, evMax )
AS
(
SELECT 'A', 100
UNION ALL SELECT 'B', 110
UNION ALL SELECT 'C', 120
UNION ALL SELECT 'D', 130
UNION ALL SELECT 'E', 140
)
SELECT prd.*, evr.rnk
FROM prd
INNER JOIN (
SELECT e1.*, ISNULL( e2.evMax, -1 ) +1 AS evMin
FROM evr AS e1
LEFT OUTER JOIN evr AS e2
ON UNICODE( e1.rnk ) = UNICODE( e2.rnk ) + 1
) AS evr ON evr.evMin <= prd.ev AND prd.ev <= evr.evMax
;
 
-- 걍 대충 하나씩 찍어내도 되고
WITH prd ( nm, prc, ev )
AS
(
SELECT '품1', 20400, 105
UNION ALL SELECT '품2', 19400, 100
UNION ALL SELECT '품3', 24200, 125
),
evr( rnk, evMax )
AS
(
SELECT 'A', 100
UNION ALL SELECT 'B', 110
UNION ALL SELECT 'C', 120
UNION ALL SELECT 'D', 130
UNION ALL SELECT 'E', 140
)
SELECT *, ( SELECT MIN( rnk ) FROM evr WHERE ev <= evMax ) AS rnk
FROM prd
;
 
-- ABCD 순서대로 올라가니까
WITH prd ( nm, prc, ev )
AS
(
SELECT '품1', 20400, 105
UNION ALL SELECT '품2', 19400, 100
UNION ALL SELECT '품3', 24200, 125
),
evr( rnk, evMax )
AS
(
SELECT 'A', 100
UNION ALL SELECT 'B', 110
UNION ALL SELECT 'C', 120
UNION ALL SELECT 'D', 130
UNION ALL SELECT 'E', 140
)
SELECT prd.nm, prd.prc, prd.ev, MIN( evr.rnk )
FROM prd
INNER JOIN evr ON prd.ev <= evr.evMax
GROUP BY prd.nm, prd.prc, prd.ev
;
 
우욱님이 2014-05-13 18:50에 작성한 댓글입니다. Edit

우욱님!!!!

눈물나요...ㅠㅠ

저두 우욱님처럼 다른분들께 도움이되는 날이 왔으면 좋겠네요.

너무너무 감사합니다.

선이님이 2014-05-13 19:07에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6812가변적이 가로 데이터를 세로로 출력하고 싶습니다. [2]
궁금이
2014-05-16
9913
6811특정문자 찾기 [2]
궁금이
2014-05-16
8962
6810테이블 FK 를 걸고자 하는데 이것이 가능할런지요..? [2]
홍두표
2014-05-15
7342
6809최저가격에 등급을 표시하고 싶습니다. [4]
선이
2014-05-12
8252
6808제발 도와주세요.... 3번째항목이 불특정시간마다 뜹니다.. [6]
이상진
2014-05-02
8381
68072012버전에서 SSIS 알수없는 유형 200 [1]
ㅜㅜ
2014-04-27
7436
6806ms sql rownumber 질문드려요!! [1]
서보경
2014-04-24
7358
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.055초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다