SQL消息209,级别16,状态1,行498不明确的列名称'SupplyCode'

时间:2016-03-15 20:24:04

标签: sql

无论我做什么,我似乎无法解决错误。

  

Msg 209,Level 16,State 1,Line 498   不明确的列名'SupplyCode'。

- 小时。选择从未在作业上使用过的耗材的供应代码和说明。(2分)

select SupplyCode,Description, count(*) from JobSupply

inner join Supply
on Supply.SupplyCode = JobSupply.SupplyCode

group by Supply.SupplyCode

Msg 8120,Level 16,State 1,Line 498 列'Supply.Description'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

这就是我所做的orignallay 从Supply

中选择Supply.SupplyCode,Description,count(jobNumber)

内部联接JobSupply 在Supply.SupplyCode = JobSupply.SupplyCode

按Supply.SupplyCode分组

有Count(JobNumber)= 0

2 个答案:

答案 0 :(得分:1)

您需要在所选列中限定SupplyCode,因为它无法消除Supply中的SupplyCode和JobSupply中的SupplyCode的歧义。尝试:

select S.SupplyCode,Description, count(*) from JobSupply
inner join Supply S on S.SupplyCode = JobSupply.SupplyCode
group by S.SupplyCode

答案 1 :(得分:1)

由于列SupplyCode存在于两个引用的表中,因此您必须限定select语句中的名称,并指定应从哪个表中检索它。

您也可以考虑使用别名:

select s.SupplyCode, Description, count(*) 
from JobSupply js
join Supply s on s.SupplyCode = js.SupplyCode
group by s.SupplyCode, description

另外,您提供的查询可能无法回答您尝试解决的问题。 (选择从未在作业中使用的耗材的供应代码和说明

您可能希望使用左连接并过滤掉缺失的行,因为这些行应该是从未使用过的行。或者您可以将相关子查询与exists谓词一起使用:

这样的事情:

select SupplyCode, Description 
from Supply s
where not exists (select 1 from jobsupply js where s.SupplyCode = js.SupplyCode)