gpt4 book ai didi

sql - 使用 select 查询以大写和小写形式对相同值进行分组

转载 作者:行者123 更新时间:2023-12-01 22:17:03 26 4
gpt4 key购买 nike

在下表中,InputParameterName列包含Product1(P大写)和pRoduct1( R 大写)。

表 1:

InputParameterName  Period  PeriodInput
Product1 2017 25704
Product1 2018 25704
pRoduct1 2017 16
pRoduct1 2018 16
pRoduct1 2017 57.6
pRoduct1 2018 57.6
pRoduct1 2017 40.5
pRoduct1 2018 40.5

我的查询:

SELECT InputParameterName, Period, SUM(CAST(PeriodInput AS FLOAT)) PeriodInput  
FROM Table1
GROUP BY InputParameterName, Period

结果:

InputParameterName  Period  PeriodInput
Product1 2017 25818.1
pRoduct1 2018 25818.1

在结果中您可以看到 InputParameterName 列有 Product1(P 大写)和 pRoduct1(R大写)。

有什么方法可以使两者相同,Product1pRoduct1(不应用任何字符大小写转换的精确值)?

最佳答案

使用lower()upper():

SELECT MIN(InputParameterName) as InputParameterName, Period,
SUM(CAST(PeriodInput AS FLOAT)) PeriodInput
FROM Table1
GROUP BY LOWER(InputParameterName), Period;

GROUP BY 中使用 LOWER() 定义。它不在 SELECT 中使用,因此您始终会在数据中获得一个值。

如果您不关心大小写,那么您应该考虑设置 collation列、表或数据库,因此在涉及字符串的表达式中忽略大小写。

编辑:

如果上面的结果返回两行,那么大小写不是问题。你可能有隐藏的角色。最有可能的是空格,所以你可以试试:

GROUP BY LOWER(REPLACE(InputParameterName, ' ', '')), Period;

希望隐藏的空间不比空间更复杂。

编辑二:

我现在明白了。您想要这两行,您只希望值相同。然后窗口函数可以做你想做的事:

SELECT MIN(InputParameterName) OVER (PARTITION BY LOWER(InputParameterName)),
Period, SUM(CAST(PeriodInput AS FLOAT)) as PeriodInput
FROM Table1
GROUP BY InputParameterName, Period;

关于sql - 使用 select 查询以大写和小写形式对相同值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com