테이블의 한 컬럼과 변수로 넘어오는 데이터를 비교해서
같은 값이 없으면 그테이블의 가장 큰 값을 가져오는 조건문입니다.
변수로 201306 이라는 값이 넘어오고
테이블의 데이터와 비교해서 같은값이 없으면 테이블에서 가장 큰 값을 가져와야합니다.
WHERE절에 어떻게 조건을 주면 값을 가져올 수 있을까요?
답변 부탁드리겠습니다.
Comment 8
-
건우아빠
2013.06.20 12:04
-
catchv
2013.06.20 12:06
이게 조건보다는 순차적으로 하는 것이 더 좋을 것을 판단되지만
꼭 WHERE 절로 해야 한다면 참고 하시면 될 것 같습니다.
CREATE TABLE #test
(
col1 INT
)
GOINSERT INTO #test values(1)
INSERT INTO #test values(2)
INSERT INTO #test values(3)
INSERT INTO #test values(4)
INSERT INTO #test values(5)
INSERT INTO #test values(6)DECLARE @i INT
SET @i = 4--SET @i = 14 -- 없는 경우
SELECT MAX(col1)
FROM #test
WHERE col1 = (CASE WHEN EXISTS( SELECT * FROM #test WHERE col1 = @i) THEN @i
ELSE col1
END) -
건우아빠
2013.06.20 12:14
아! case로 한번 묶어 주면되었군요..
미쳐 생각을 .....
-
맨즈밤
2013.06.20 15:06
SELECT MAX(col1)
FROM #test
WHERE col1 <= @i에....이건 아닌가요? 다들 복잡하게 하셔서리.....
-
건우아빠
2013.06.20 16:00
없을때만 큰값이라... 무조건 큰값이 아니라서요.
-
맨즈밤
2013.06.20 18:00
에..에...에...헷갈립니다....
SELECT MAX(col1)
FROM #test
WHERE col1 <= @i요렇게 하면 조건 이하보다 작은것중 max 값이라 맞는값이 들어오면 그 값이 max값이 될거고 , 맞는값이 아니라면 그 이하 데이터중 max 값 아닌가요? 움....움..움....
-
항해자™
2013.06.20 23:18
1,2,3,5,7,10 있는데 6 입력 들어 오면 어떻게 되나요??
-
맨즈밤
2013.06.21 08:55
허걱...... 제가 난독증이 있나봅니다... 문제를 잘못 이해하고 있었네요. 같은값이 없을때 그나마 큰값 찾는걸로 착각을........혼란을 드려 죄송합니다~~
저는 where절로만 처리 하기가 좀 어렵네여....
/*
with res as(
select 1 no union all
select 2 no union all
select 3 no union all
select 4 no union all
select 5 no union all
select 6 no union all
select 8 no union all
select 9 no union all
select 11 no union all
select 12 no union all
select 13 no union all
select 14 no union all
select 19 no
)
select *
into #test
from res
*/
----------------------------
select top 1 no
from (
select 1 gb, no
from #test
where no = 7
union
select 2 gb , max(no) no
from #test ) r
order by gb ;
----------------------------
select (case when b.no IS null then a.no else b.no end) no
from ( select MAX(no) no
from #test ) a
outer apply
( select no
from #test
where no = 7
) as b
----------------------------