我正在尝试编写一个查询,该查询将根据其中一列中的值为每条记录生成一行,在这种情况下,它是一个电话号码类型。某些类型对我来说比其他类型更有用,所以我一直在尝试选择它们的顺序。例如:如果存在一个";家;号码我想先放那一行(因为如果一个人有多个电话号码,他可以有多行(,如果没有家庭号码,那就给我一个手机号码,如果没有家或手机,那就告诉我一个工作号码。。。
我认为IF/THEN/ELSE可能很适合,但它与Excel中的简单公式不同,我只是没有用正确的方式编写它。或者,很可能还有更好的方法?我在以前的工作场所(早在我涉足sql之前(就有过这样的经历,他们说它就像";瀑布";,我记得当时我觉得它看起来很基本,很短,但我就是不想。
我希望能朝着正确的方向推动一下。
更新:以下是该表的一个大大简化的版本(带有无意义的随机电话号码(,适用于SQL Server
ID_no | 类型 | 电话||
---|---|---|---|
408419 | 1 | 4401600 | |
408419 | 13 | 4867631 | |
406767 | 1 | 9183808 | |
406767 | 13 | 6355198 | |
410501 | 13 | 4336010 | |
405193 | 8 | 2070904 | |
405193 | 3 | 1512081||
410501 | 8 | 8148225 | |
407309 | 8 | 5195868 | |
409858 | 8 | 3345459 | |
408266 | 1 | <1054263>
with data as (
select *,
row_number() over (
partition by ID_no
order by case type
when 1 then 1 when 5 then 2 when 8 then 3
when 13 then 4 when 3 then 5 else 6 end
) as rn
from T
)
select ID_no, type, phone from data where rn = 1;