2012-08-09 3 views
0

이것은 이해가되지 않을 수 있지만 다른 열이 가장 적을 때를 기준으로 열을 선택하려고합니다. 예를 들어, 내가 3 INT 열 및 3 개 VARCHAR 컬럼 아래의 예 단위 = INT에서 다른 열이 최소가 될 때를 기준으로 열을 선택하십시오.

하고, 위의 예에서 링크 = VARCHAR

Unit1|Link1|Unit2|Link2|Unit3|Link3 
72|www.google.com|43|www.yahoo.com|9212|www.lycos.com

이 Unit2 유닛을 적어도 그래서 나는 Link2부터를 선택하려는 것입니다 .

이 내가 이상을 선택, 그래서 어떤 도움이 좋지 않을까 어떻게

select Least(
         Coalesce(myTable.Unit1, 
           myTable.Unit2, 
           myTable.Unit3), 
         Coalesce(myTable.Unit1, 
           myTable.Unit2, 
           myTable.Unit3), 
         Coalesce(myTable.Unit1, 
           myTable.Unit2, 
           myTable.Unit3)) 
         AS LowestUnit 
from myTable 

답변

0

한 가지 방법 : 대한

SELECT CASE WHEN Unit1 = LEAST(Unit1,Unit2,Unit3) THEN Link1 
      WHEN Unit2 = LEAST(Unit1,Unit2,Unit3) THEN Link2 
      WHEN Unit3 = LEAST(Unit1,Unit2,Unit3) THEN Link3 
     END AS LinkL 

(당신은 그 세 번째 대신에 ELSE LINK3를 사용할 수 있습니다 동일한 결과를 얻었을 때 나는 세 가지를 모두 검사하여 ELSE가 NULL로 기본 설정되도록했습니다.)

등가 이상 간결한 :

,
SELECT CASE LEAST(Unit1,Unit2,Unit3) 
      WHEN Unit1 THEN Link1 
      WHEN Unit2 THEN Link2 
      WHEN Unit3 THEN Link3 
     END AS LinkL 
0

이 도움이 될 수 있습니다 :

drop table if exists myTable; 

create table myTable 
(Unit1 int unsigned not null, 
Link1 varchar(50) not null, 
Unit2 int unsigned not null, 
Link2 varchar(50) not null, 
Unit3 int unsigned not null, 
Link3 varchar(50) not null 
); 

insert into myTable values (72,'www.google.com',43,'www.yahoo.com',9212,'www.lycos.com'); 

select 
case least(Unit1,Unit2,Unit3) 
when Unit1 then Link1 
when Unit2 then Link2 
when Unit3 then Link3 
end as Link 
from myTable; 
관련 문제