2010-10-22 45 views
2

我一直坚持了很长一段时间,现在试图让此查询工作。 这里的设置:SQL查询帮助:从计数子查询中返回不同的值

我有一个包含非唯一(Number)列和非唯一(Result)列的[Notes]表。我希望创建一个SELECT语句,将显示的每个不同的(数字)值,其中{(号码),(结果)}元组,其中结果的计数=“NA”是> 25.

Number | Result 
100 | 'NA' 
100 | 'TT' 
101 | 'NA' 
102 | 'AM' 
100 | 'TT' 
200 | 'NA' 
200 | 'NA' 
201 | 'NA' 

基本上,有一个自动拨号程序可以调用一个号码并根据呼叫结果返回一个代码。我们希望忽略返回超过25次的“不适用”代码的数字。

我的基本的尝试至今都被类似:

SELECT DISTINCT n1.Number 
FROM Notes n1 
WHERE (SELECT COUNT(*) FROM Notes n2 
     WHERE n1.Number = n2.Number and n1.Result = 'NA') > 25 

我知道这个查询是不正确的,但总的来说,我不知道如何从最初的选择有关的DISTINCT n1.Number到子查询COUNT中使用的数字。我看到的大多数示例并不是通过向返回的COUNT添加条件来实现此目的。在过去的五年中我没有必要触及太多的SQL,所以我很生疏。

+2

1)我讨厌阅读,并试图理解,显示你有什么表,你想要它看起来像什么。 2)你是电话推销员吗? – vol7ron 2010-10-22 05:42:10

+0

如果您发布代码或XML,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它! – 2010-10-22 06:33:09

回答

5

,你可以做这样的:

SELECT Number 
FROM Notes 
WHERE Result = 'NA' 
GROUP BY Number 
HAVING COUNT(Result) > 25 
+0

+1因为有,但你忘了WHERE – 2010-10-22 05:48:54

+0

谢谢,这很好。只是其中的一种情况,我被锁在试图做一件事情而看不见它。 – Joe 2010-10-22 06:01:07

+1

@Arnauld自从被接受以来,我为你添加了WHERE关键字,以防有人复制并粘贴它 – 2010-10-22 06:06:57

2

试试这个:

SELECT Number 
FROM (
    SELECT Number, Count(Result) as CountNA 
    FROM Notes 
    WHERE Result = 'NA' 
    GROUP BY Number 
) 
WHERE CountNA > 25 

编辑:根据SQL产品,您可能需要例如提供派生表的表相关名

SELECT DT1.Number 
    FROM (
     SELECT Number, Count(Result) as CountNA 
      FROM Notes 
     WHERE Result = 'NA' 
     GROUP 
      BY Number 
     ) AS DT1 (Number, CountNA) 
WHERE DT1.CountNA > 25; 
+0

它不会识别第二个where子句中的CountNA。我假设这是因为范围只是在该子查询中? – Joe 2010-10-22 05:56:53

+0

@onedaywhen谢谢你 – 2010-10-22 10:16:14