将列中的相同名称的不同数据计为1个计数sql server

时间:2016-02-19 07:01:16

标签: sql sql-server count

抱歉,我想问一下这个我已经尝试但仍然无法得到它 好吧,我有一张这样的桌子

tblcount
-----------------------
no_req  no_order    no_grn   
R001    D001        G001
R001            
R001    D001        G001
R002    D002        
R002    D002        G002
R003    D001        G001
R004    D003        G002
R004    D003        G002
R005    D003     
R005    D003
R006    D004        G002
R006    D005        G003
R006    D007
R007    D007        G005
R007    D008        G006

我想用这样的标准来计算。 例如,从上表中可以得到3个来自no_req的R001数据,但只有2个来自no_order和no_grn,所以它不算数。它只会计算完整的数据。像这样的东西:

  1. no_req R001有3个数据,但no_order和no_grn只有2 =它不计算
  2. no_req R002有2个数据没有订单有2个数据但是no_grn只有1 =它不算数
  3. no_req R003有1个数据no_order和no_grn有1个数据=它数1个
  4. no_req R004有2个数据no_order和no_grn有2个数据=它数1
  5. no_req R005,包含2个数据no_order,包含2个数据,no_grn 0 =不计数
  6. no_req R006,包含3个数据no_order,包含3个数据,no_grn 2个数据=不计数
  7. no_req R007包含2个数据no_order和no_grn包含2个数据=它计数1
  8. 所以从上面的数据我可以得到计数结果= 3 我应该怎么做才能从上面的表中得到那个计数结果= 3

2 个答案:

答案 0 :(得分:3)

试试这个:

SELECT COUNT(*)
FROM (
  SELECT no_req  
  FROM tblcount
  GROUP BY no_req 
  HAVING COUNT(*) = COUNT(CASE WHEN no_order <> '' THEN no_order END) AND 
         COUNT(*) = COUNT(CASE WHEN no_grn <> '' THEN no_grn END)) AS t

内部查询选择满足条件的任何no_req组。外部查询只计算这些组的数量。

Demo here

答案 1 :(得分:3)

简化@GiorgosBetsos logig:

SELECT COUNT(*)
FROM
 (
  SELECT no_req  
  FROM tblcount
  GROUP BY no_req 
  HAVING -- check if both columns always contain data 
     COUNT(CASE WHEN no_order = '' OR no_grn = '' THEN 1 END) = 0
 ) AS t