【问题标题】:How to get unique value from sql table based on charachter length of value如何根据值的字符长度从sql表中获取唯一值
【发布时间】:2016-03-07 11:18:31
【问题描述】:

这里我在 sql 表中有两列,如下例 column1 和 column2,我想根据表中的 column2 列值获取唯一值行
下面的虚拟表示例

 Column1             Column2

----------         -------------

 1001                   ab
 1001                   abc
 1001                   abcd
 2001                   wxyz
 2001                   wxy
 2001                   wx

在上面的示例中,值从 a 开始,另一个值从 Column2 中的 w 开始
在相同值字符长度的基础上,我想得到如下结果
输出

 Column1                Column2

----------           -----------

1001                     abcd
2001                     wxyz

在此先感谢您的帮助:)

【问题讨论】:

  • 描述如何选择 column2 值,以获得唯一的 column1 值。
  • 以上输出基于单个表列上的 column2 值(字符长度)
  • 如果两行的值不同,但长度相同(最大)怎么办?

标签: sql database rdbms


【解决方案1】:

如果我理解正确,你想要最长的长度(你没有说当有两个长度相同时该怎么做)但基本上你想要这样的东西:

SELECT * FROM YourTable
WHERE (column1,len(column2)) IN(select Column1,max(len(column2))
                                FROM YourTable
                                GROUP BY Column1)

【讨论】:

  • 但这只会搜索最大长度而不是查看文本内容。现在可能是你禁食了,jarlh 在他的评论中问了正确的问题:-)
  • 是的,但是我检查了数据的内容, abcd 大于 ab, wxyz 小于 xyz,yz ,所以我唯一能理解的就是选择一个最大长度的:) @Shnugo
  • Msg 102, Level 15, State 1, Line 2 ',' 附近的语法不正确。消息 156,级别 15,状态 1,第 3 行关键字“FROM”附近的语法不正确。
  • @Pankaj 错字,缺少 ')' ,现在试试。
  • 因为 OP - 可能 - 只对长度感兴趣,所以我会为你的猜测能力投票:-)
【解决方案2】:

如果您正在查看 column2 中的值是否包含在其他行中,换句话说:如果您正在寻找具有自身唯一字符组合的行,这可能是您的解决方案:

CREATE TABLE TestTable(Column1 INT,Column2 VARCHAR(100));
INSERT INTO TestTable VALUES
 (1001,'ab')
,(1001,'abc')
,(1001,'abcd')
,(2001,'wxyz')
,(2001,'xyz')
,(2001,'yz');

SELECT *
FROM TestTable
WHERE NOT EXISTS(SELECT 1 
                 FROM TestTable AS x 
                 WHERE x.Column1=TestTable.Column1 
                   AND LEN(x.Column2)>LEN(TestTable.Column2)
                   AND x.Column2 LIKE  '%' + TestTable.Column2  + '%'
                )

DROP TABLE TestTable;

【讨论】:

  • -- AND x.Column2 LIKE '%' + TestTable.Column2 + '%' 评论此行并感谢上述查询。
  • @Pankaj,很高兴这可以帮助您...请-下次您提出问题时-请记住,其他用户不知道您清楚什么乙>。请提供示例数据、预期输出、清晰的描述、正确的标签(DBMS!)以及您自己尝试过的内容以及您遇到的错误/错误结果。编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多