【问题标题】:select @variable=case when...end from... order by len(@variable)选择@variable=case when...end from... order by len(@variable)
【发布时间】:2012-07-31 07:06:06
【问题描述】:

我想要做的是连接一个表的两个字段,按连接字段的降序长度对它们进行排序并获得最高的结果......

这是我用来尝试实现此目的的 SQL...

declare @color nvarchar(255);
declare @board_name nvarchar(255);

select top(1)
    @board_name = board_name, 
    @color = base_color + case when shade_color is null then '' else '/' + shade_color end 
from 
    cut_vinyl
order by 
    len(@color) desc;

select @board_name, @color;

所以,如果我有 cut_vinyl 的下表

board_name | base_color | shade_color ====================================== 板0001 |明确 | 板0002 |明确 |蓝色的 板0003 |青铜 |青铜 板0004 |青铜 |绿色 板0005 |青铜 |蓝色的 板0006 |青铜 |

那么我希望 @board_nameboard0003@color青铜/青铜 ,但我似乎得到的是 @board_name = board0001@color = clear

【问题讨论】:

    标签: sql sql-server-2008 sql-server-2008r2-express


    【解决方案1】:

    您通过variable 订购:

    order by 
        len(@color) desc;
    

    如果您正在寻找最长的颜色,请使用:

    order by 
        len(base_color) + len(shade_color) desc;
    

    改为。

    【讨论】:

    • 鉴于上表,我期望的结果应该只返回 board0003。我不仅需要最长的base_color,我还需要最长的base_color + '/' + shade_color
    • 如果您也按shade_color 的长度订购,那就对了。我已经编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多