我想从名为name
的表格中选择nametype
和names
,但要优先考虑nametype
。
table names
name nametype address id
simon 01 xx 1
simon 02 xx 2
simon 03 xx 3
karen 01 xx 4
william 03 xx 5
william 01 xx 6
william 02 xx 7
我想编写一个查询,按照排序顺序选择name
= nametype
= 01或02或03 nametype
。
我只想要{{1}} = 01的行,其他2行不应该
地选择。
如何在sql中实现这一点,我需要了解如何标记已经选择的名称。
答案 0 :(得分:1)
如果您只想要where
行,请使用select t.*
from t
where t.nametype = '01';
:
nametype
如果您希望行的最小值为where
(这似乎是您的问题的意图),请使用窗口函数和min()
。一种方法使用select t.*
from (select t.*, min(t.nametype) over (partition by name) as min_nametype
from t
) t
where nametype = min_nametype;
:
#include <cmath>
#include <iostream>
#include <limits>
void main()
{
double val = exp(-10.240990982718174);
std::cout.precision(std::numeric_limits<double>::max_digits10);
std::cout << val;
}
答案 1 :(得分:0)
使用合并
来管理我的自我pseudocode:
if nametypes = OECD207
select row
elseif nametypes = OECD203
select row
elseif nametypes =OECD204
select row
end if
OECD207 OECD203 OECD204 ... 作为优先列表
select
navn
, coalesce(OECD207, OECD203, OECD204, ...) as nametype
from
(
select
navn
, max(case when nametype = "OECD207" then nametype else null end) as OECD207
, max(case when nametype = "OECD203" then nametype else null end) as OECD203
, max(case when nametype = "OECD204" then nametype else null end) as OECD204
...
from ...
group by
navn
)