这是因为各种原因一个难题:
- 你的数据不是存储在一个合适的关系格式。但是,即使每笔薪水只存储一行数据也不会使这一过程变得更容易。
- SQL通常没有很好的“行内”操作功能。
- MySQL不提供数组或简单的方式来反转数据。
- 重复值和
NULL
值可能真的很麻烦。
如果我认为没有价值的是NULL
,你不介意重复时,有在极端的关系,那么下面将工作:
select t.*,
(case when sal1 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal1
when sal2 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal2
when sal3 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal3
when sal4 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal4
end) as first_sal,
(case when sal4 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal4
when sal3 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal3
when sal2 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal2
when sal1 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal1
end) as second_sal
from t;
我要指出,这几乎任何其他数据库中的问题都会更容易。
编辑:
天哪,你不提你在输出需要多少列。如果我们只是NULL
了极值,这是比较容易:
select t.*,
(case when sal1 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal1
end) as sal1,
(case when sal2 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal1
end) as sal2,
(case when sal3 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal1
end) as sal3,
(case when sal4 not in (least(sal1, sal2, sal3, sal4), greatest(sal1, sal2, sal3, sal4))
then sal1
end) as sal4
from t;
这仍然假定四个sal
值不NULL
。
如果你有联系? –
仍然消除他们..通过考虑一个为最小,另一个为最大并保持原样。例如:Sal1 sal2 sal3 sal4 40 40 40 40在这种情况下,我只想要两个可能是任何工资。 – user7600856