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

1つのアプローチ:

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

(同等の結果を得るには、3番目のWHENの代わりにELSE Link3を使用できます。私は、3つすべてをチェックし、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 に答える