0

这可能没有任何意义,但我想做的是根据另一列最少的时间来选择一列。例如,我有 3 个 int 列和 3 个 varchar 列

在下面的示例中 Unit = int 和 Link = 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
4

2 回答 2

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 代替第三个 WHEN 以获得等效结果,我只是检查了所有三个,并让 ELSE 默认为 NULL。)

等效且更简洁:

SELECT CASE LEAST(Unit1,Unit2,Unit3)
            WHEN Unit1 THEN Link1 
            WHEN Unit2 THEN Link2
            WHEN Unit3 THEN Link3
       END AS LinkL
于 2012-08-09T16:01:36.270 回答
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;
于 2012-08-09T16:01:37.953 回答