【问题标题】:have problems with my syntax code我的语法代码有问题
【发布时间】:2018-03-19 18:03:21
【问题描述】:

我有这个任务: 一个。连接:生成一份报告,将供应商名称和位置列为“名称(位置)” 湾。上面的列表在两个字段中都包含尾随空格;修剪空格并显示结果。 C。为数据库中新派生的虚拟列分配名称 d。提醒一下,检索供应商“DLL01”提供的产品数量 e.检索每个供应商提供的产品数量,并在两列中显示结果 “vend_id”和“num_products” 我写了一些代码,但它没有运行。

a. select [vend_name] +'('+[vend_address] + [vend_city]+')' as 'Name (Location)'
from [dbo].[Vendors]

b. select 
Ltrim(Rtrim([vend_name] +'('+[vend_address] + [vend_city]+ ')' )as 'Name (Location)'
from [dbo].[Vendors]

c.select 
Ltrim(Rtrim([vend_name] +'('+[vend_address] + [vend_city]+')')),'   ','  '+ char(7)),
char(7),'') as 'vend information'
from [dbo].[Vendors]

d.select [vend_name] +'('+[vend_address] + [vend_city]+')' as 'Name (Location)'
from [dbo].[Vendors]

e. select [vend_id]='DLL01', count([vend_id]) as num products
from [dbo].[Vendors]
where [vend_id]='DLL01'

我认为这只是语法问题。

你能帮帮我吗?

谢谢!!!

【问题讨论】:

  • 没有运行是什么意思?错误是什么?您使用的是什么 DBMS?我根据语法猜测sql server,所以根据它更新标签。
  • 例如问题 c 我有这个:Msg 102, Level 15, State 1, Line 2 Incorrect syntax near ')'.
  • 您不应该对c 中的所有列使用LTRIMRTRIM 吗?
  • 我不确定要创建虚拟列的代码:c。为数据库中新派生的虚拟列分配一个名称
  • c 你只需要指定一个名字。不确定你想用char(7) 做什么。 d 没有 WHERE 子句。 e 似乎不对;你应该使用GROUP BY。查找如何使用它,如果您仍有疑问,请返回。

标签: sql data-analysis


【解决方案1】:

一个。看起来不错。在(前加了一个空格

select [vend_name] +' ('+[vend_address] + [vend_city]+')' as 'Name (Location)'
from [dbo].[Vendors]

b.添加了缺少的)

select Ltrim(Rtrim([vend_name] +' ('+[vend_address] + [vend_city]+ ')')) as 'Name (Location)'
from [dbo].[Vendors]

c。避免列名中包含(空格)。

select Ltrim(Rtrim([vend_name] +' ('+[vend_address]+[vend_city]+')')) as 'vendor_information'
from [dbo].[Vendors]

d。添加了WHERE 子句。

select [vend_name] +' ('+[vend_address] + [vend_city]+')' as 'Name (Location)'
from [dbo].[Vendors]
WHERE [vend_id]='DLL01'

e。添加GROUP BY获取计数并将计数更改为*

select [vend_id], count(*) as num_products
from [dbo].[Vendors]
GROUP BY [vend_id]

我不确定期望是什么,但您应该在所有列上使用LTRIM(RTRIM(x)),因为空格可以在其中任何一个中。

【讨论】:

  • 谢谢!!!就在 e.select [vend_id], count([vend_id]) as num products from [dbo].[Vendors] GROUP BY [vend_id]???
  • 有什么问题?
  • 问题 e。 (*)
  • 根据您的数据,结果可能相同。使用 COUNT(*) 更为常见,因为您正在计算行数。您也可以使用 COUNT(1)。不同之处在于您是否需要计算 DISTINCT 的东西。
  • 使用count([vend_id]),您不会计算任何vend_id 为空的记录。 GROUP BY 将为这些创建一个组,但计数不会显示正确的结果。
【解决方案2】:

对于 b 你需要关闭你的 Ltrim 括号 - 你只关闭了 rtrim 一个:

   select Ltrim(Rtrim([vend_name] +'('+[vend_address] + [vend_city]+ ')' ))as 'Name (Location)'
    from [dbo].[Vendors]

【讨论】:

  • 从[dbo].[Vendors] 你能帮帮我吗???
猜你喜欢
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2010-10-19
  • 2017-09-30
  • 1970-01-01
相关资源
最近更新 更多