使用剩余计数时的SQL WHERE语句语法错误

马特

我有一个WHERE从逻辑上讲我希望它带回短名称的第一位不匹配的结果子句。

简称可以是:

1.1
1.2
2.1
2.2

样本数据WITHOUTwhere子句:

+-----------+--------+------+
| Shortname | number |  ID  |
+-----------+--------+------+
| 2.1       |      1 | 3333 |
| 1.1       |     60 | 3333 |
| 1.2       |     90 | 3333 |
| 2.1       |     50 | 4444 |
| 2.2       |     30 | 4444 |
| 1.1       |     80 | 5555 |
| 1.2       |     10 | 5555 |
+-----------+--------+------+

预期的数据WITHwhere子句:

+-----------+--------+------+
| Shortname | number |  ID  |
+-----------+--------+------+
| 2.1       |      1 | 3333 |
| 1.1       |     60 | 3333 |
| 1.2       |     90 | 3333 |
+-----------+--------+------+

我尝试了代码:

SELECT shortname, number, id
FROM table
WHERE ((left(shortname,1) like '%1%') != ((left(shortname,1) like '%2%')

但这会产生错误:

消息102,级别15,状态1,第21
行在“!”附近的语法不正确。

澄清更新

我需要每个ID的结果,因此在上面的示例中有ID的3333、4444和5555。我只想带回ID,3333因为每个ID中都没有单个的第一个字符值shortname它同时包含值12

在我不想看到其他ID的地方,因为短名称在第一位数字1 = 1和2 = 2等上匹配。

塔林

如果要在中返回ID多个第一个字符shortname,请首先查看获取不同的行数:

select id
from yourtable
group by id
having count(distinct left(shortname, 1)) > 1;

当与ID关联时,这应该返回给您同时具有第2个字符和第1个字符的行。然后,您可以使用它返回其余数据:

;with cte as
(
  select id
  from yourtable
  group by id
  having count(distinct left(shortname, 1)) > 1
)
select 
  t.shortname,
  t.number, 
  t.id
from yourtable t
inner join cte c
  on t.id = c.id;

请参见带有演示的SQL Fiddle返回:

| SHORTNAME | NUMBER |   ID |
|-----------|--------|------|
|       2.1 |      1 | 3333 |
|       1.1 |     60 | 3333 |
|       1.2 |     90 | 3333 |

一个更灵活的选择是获取小数点前的字符,并验证您对所有数字都有不同的计数。要做到这一点,你会使用这样的函数CHARINDEX与一起LEFT

;with cte as
(
  select id
  from yourtable
  group by id
  having count(distinct left(shortname, charindex('.', shortname)-1)) > 1
)
select 
  t.shortname,
  t.number, 
  t.id
from yourtable t
inner join cte c
  on t.id = c.id;

请参见带有演示的SQL Fiddle这将返回:

| SHORTNAME | NUMBER |   ID |
|-----------|--------|------|
|       2.1 |      1 | 3333 |
|       1.1 |     60 | 3333 |
|       1.2 |     90 | 3333 |
|      14.1 |      5 | 6666 |
|      14.2 |     78 | 6666 |
|      24.1 |     89 | 6666 |

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL语句语法错误

来自分类Dev

MySQL-在where语句中使用<>时出现语法错误(插入)

来自分类Dev

SQL语句中的语法错误问题

来自分类Dev

SQL CASE语句IS NULL语法错误

来自分类Dev

SQL查询UPDATE语句语法错误

来自分类Dev

sql 语句中的语法错误?

来自分类Dev

SQL 插入语句语法错误

来自分类Dev

使用IF语句触发语法错误

来自分类Dev

语法错误,使用sep =语句打印

来自分类Dev

“ where”附近的SQL语法错误

来自分类Dev

创建主键时SQL语句语法错误

来自分类Dev

尝试使用if语句创建函数时的PostgreSQL语法错误

来自分类Dev

使用语句时出现 MySQL 1064 语法错误

来自分类Dev

使用 PREPARE 语句时出现语法错误

来自分类Dev

使用多行打印语句时出现语法错误

来自分类Dev

尝试在sql中声明变量并使用if-else语句时出现语法错误。-“ VARCHAR”或附近的语法错误

来自分类Dev

没有Group语句时,MySQL“ Group”语法错误?

来自分类Dev

在yacc中解析赋值语句时收到语法错误

来自分类Dev

在yacc中解析赋值语句时收到语法错误

来自分类Dev

Batch IF 语句在与空格比较时出现语法错误

来自分类Dev

带警卫的功能:使用“ where”时的语法错误

来自分类Dev

SQL中带Case语句的语法错误

来自分类Dev

SQL语句中的Spring Boot休眠语法错误

来自分类Dev

Postgres SQL插入语句中的语法错误

来自分类Dev

sum函数内的case语句的SQL语法错误

来自分类Dev

sum函数内的case语句的SQL语法错误

来自分类Dev

我的SQL语句“ INSERT INTO”中的语法错误

来自分类Dev

SQL语句上的Visual Studio TableAdapter语法错误

来自分类Dev

访问中的SQL更新语句的语法错误

Related 相关文章

热门标签

归档