计数查询给出错误的列名错误

时间:2015-02-02 11:30:41

标签: sql sql-server sql-server-2008 tsql

select  COUNT(analysed) from Results where analysed="True" 

我想显示分析值为true的行数。

但是,我的查询给出错误:“多部分标识符”Results.runId“无法绑定。”。

这是实际查询:

select ((SELECT COUNT(*) AS 'Count' 
  FROM Results 
  WHERE Analysed = 'True')/failCount) as PercentAnalysed 
from Runs 
where Runs.runId=Analysed.runId

我的表架构是:

enter image description here

The Analysed table schema is:

Results table schema

我想要的特定runId的值是:(分析的条目数= true)/ failCount

编辑:如何合并这两个查询?

i)选择runId,Runs.prodId,prodDate,prodName,buildNumber,totalCount作为TotalTestCases,(passCount * 100)/(passCount + failCount)作为PassPercent,             来自Runs的passCount,failCount,runOwner,Runs.prodId = Product.prodId的产品

ii)选择(cast(counts.Count as decimal(10,4))/ cast(failCount as decimal(10,4)))作为PercentAnalysed 从运行 内部联接 (   SELECT COUNT(*)AS'Rec',runId   从结果   WHERE Analyzed ='True'   GROUP BY runId 计数 on counts.runId = Runs.runId

我试过这个: 选择runId,Runs.prodId,prodDate,prodName,buildNumber,totalCount作为TotalTestCases,(passCount * 100)/(passCount + failCount)作为PassPercent,             passCount,failCount,runOwner,counts.runId,(cast(counts.Count as decimal(10,4))/ cast(failCount as decimal(10,4)))as PercentAnalysed 来自Runs,产品 内部联接 (   SELECT COUNT(*)AS'Rec',runId   从结果   WHERE Analyzed ='True'   GROUP BY runId 计数 on counts.runId = Runs.runId
其中Runs.prodId = Product.prodId

但它会出错。

4 个答案:

答案 0 :(得分:1)

我会尝试以下查询:

SELECT COUNT(*) AS 'Count'
FROM Results
WHERE Analysed = 'True'

这会计算Analyzed为'True'的所有行。如果Analysed列的数据类型是BIT(布尔值)或STRING(VARCHAR,NVARCHAR),这应该有效。

答案 1 :(得分:1)

您的问题是由于表格的不正确加入引起的。您需要来自运行和结果的信息,但它们在查询中未正确组合。你有一个嵌套子查询的正确想法,但它在错误的位置。您还引用了外部where子句中的Analyzed表,但它未包含在from子句中。

请改为尝试:

select (cast(counts.Count as decimal(10,4)) / cast(failCount as decimal(10,4))) as PercentAnalysed 
from Runs 
inner join
(
  SELECT COUNT(*) AS 'Count', runId 
  FROM Results 
  WHERE Analysed = 'True'
  GROUP BY runId
) counts
on counts.runId = Runs.runId

我已将其设置为内连接,以消除任何没有分析结果的运行;如果需要这些行,可以将其更改为左连接,但需要添加代码来处理null情况。我还为这两个数字添加了强制转换,因为否则查询将执行整数除法并截断任何小数量。

答案 2 :(得分:0)

CASE

中使用Count
SELECT COUNT(CASE WHEN analysed='True' THEN analysed END) [COUNT]
FROM Results

答案 3 :(得分:0)

select  COUNT(*) from Results where analysed="True"