使用SQL

时间:2015-09-17 14:51:29

标签: sql-server

关于与另一个不同值相关联的特定值的count语句,我需要一些帮助。让我们试着解释一下。

当前数据(输出)

    Policy Number|Member Number|Ben Type|Principal|Spouse|Child
    1234          ABCD              M      
    1234          ABCD              S
    1234          ABCD              C
    1234          ABCD              C

    1234          EFGH              M
    1234          EFGH              C
    1234          EFGH              C

必需的输出报告

    Policy Number|Member Number|Ben Type|Principal|Spouse|Child
    1234          ABCD              M       1         1     2

    1234          EFGH              M       1         0     2

M主要成员 S配偶 C儿童依赖

数据包含更多列,例如名字等。但我希望Ben Type指标的计数仅反映显示Principle Members信息的行(Ben Type = M)。

以下代码统计所有Ben类型指标,而不使用策略编号作为非重复值。可以有X 1政策编号和X 1会员编号。因此,不同的值将是政策编号和会员编号。

UPDATE 
  [XRef1] 
SET
  [Child] = 
(SELECT COUNT([Ben Type])
FROM
  [Xref1]
WHERE
  [Ben Type] = 'C')

这是我尝试的另一个例子,但我知道它可能不会工作,因为它不会返回所有列,只有策略号和计数将是不正确的? 生成以下错误。 (当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式)

UPDATE 
  XRef1
SET     
  [Child] = 
(SELECT DISTINCT[Policy Number],COUNT([Ben Type])
FROM    
  XRef1
WHERE   
  [Ben Type] = 'C'
GROUP BY  
  [policy Number])

我对Exists的陈述一无所知,但是我读了它,并按照一些疑问进行了讨论。它是不正确的,基本上子查询是主查询的副本。产生了同样的错误。

 UPDATE 
   XRef1
 SET        
   [Child] = 
 (SELECT DISTINCT[Policy Number],COUNT([Ben Type])
 FROM       
   XRef1
 WHERE  
   [Ben Type] = 'C'
 GROUP BY  
   [policy Number])
 WHERE EXISTS 
 (SELECT DISTINCT[Policy Number],COUNT([Ben Type])
 FROM       
   XRef1
 WHERE  
   [Ben Type] = 'C'
 GROUP BY  
   [policy Number])

请告诉我,如果我在正确的轨道上,或者试图让它变得比实际更复杂。

1 个答案:

答案 0 :(得分:1)

试试这个:

foo! -- begin null; end;

Here是关于PIVOT运算符的一些信息。