sql - 如何使用sql只返回一行中的一部分值
问题描述
下面是我在 SQL Server 中的表,
Title value
------------- -------
abc_ef_1_123 53.2
abc_ef_1_1 43.2
abc_ef_1_11 23.1
abc_ef_1_12 45.2
abc_ef_1_13 56.4
def_cef_3_23 98.1
def_cef_3_3 53.2
def_cef_3_12 43.2
def_cef_3_13 23.1
def_cef_3_123 45.2
需要按第三个“_”之前的值对行进行分组,如下所示,
从 table1 按标题分组选择标题,最大值(值)作为值;
结果应该是,
title value
--------- -----
abc_ef_1 56.4
def_cef_3 98.1
请协助。
解决方案
我相信这会很好地完成工作(用你的表名替换“测试”):
;with cte as (
select
left(Title, len(Title) - charindex('_', reverse(Title) + '_')) as Title,
Value
from Test
)
select cte.Title, MAX(cte.value)
from cte
group by cte.Title
现在,要准确拍摄第三个下划线,请创建下面文章中指示的函数,然后应用以下查询以获得所需的结果。将凌乱的逻辑内联有点反直觉,所以使用这样的函数是一种方法。 http://www.sqlservercentral.com/scripts/Miscellaneous/30497
使用上面链接中的 Sql Server 函数进行查询:
;with cte as (
select
LEFT(Title, dbo.CHARINDEX2('_', Title, 3) - 1) as Title,
Value
from Test
)
select cte.Title, MAX(cte.value)
from cte
group by cte.Title
祝你好运!
推荐阅读
- javascript - 限制 JavaScript 中的字母重复次数
- intercept - 网真代理安装超时
- c# - 设置使应用程序崩溃的事件
- data-science - Apache nifi 在数据科学中的应用
- php - 如果存在于laravel数组中,如何检查值?
- java - 在 JDK 1.6 上使用 JJWT
- javascript - 如何从具有一个对象的数组中获取对象值并仅使用对象值创建一个新数组
- laravel - Laravel memcached 在共享主机中不起作用
- apache-spark - 添加条件过滤子句
- c# - 如何与 TransientHttpError 一起重试 401 请求(5XX 和 408)