我的系统是winXP SP3+SQL2005。  问题描述:
  我有这样一个表     mytable  --表名  id  信息单号  设备   
   1   1001       a
   2   1001       b
   3   1001       a
   4   1001       b
   5   1002       b
   6   1003       a
   7   1004       c
  
  需求说明:
     想用一句SQL语句,得到这样的结果:统计出‘设备’字段相同值在本表中出现的次数,如果信息单号一样的话,算出现一次。如我要统计相同值‘a',正确的结果应该得到 2 次就对了,而不是3次,因为前两次'a'的信息单号一样。   
  

解决方案 »

  1.   

    是要这样么?
    CREATE TABLE #tp
    (
    id INT IDENTITY,
    infoSo INT,
    Enqu VARCHAR(10)
    )  
    INSERT INTO #tp
    SELECT 1001,'a'
    UNION ALL
    SELECT 1001,'b'
    UNION ALL
    SELECT 1001,'a'
    UNION ALL
    SELECT 1001,'b'
    UNION ALL
    SELECT 1002,'b'
    UNION ALL
    SELECT 1003,'a'
    UNION ALL
    SELECT 1004,'c'SELECT t.infoso,count(t.Enqu) cnt
    FROM #tp t
    WHERE NOT EXISTS(SELECT NULL FROM #tp p 
                     WHERE p.infoSo=t.infoSo 
                     AND p.Enqu=t.Enqu 
                     AND p.id>t.id)
    GROUP BY t.infoSoinfoso      cnt
    ----------- -----------
    1001        2
    1002        1
    1003        1
    1004        1(4 row(s) affected)
      

  2.   


    declare @num varchar(20)
    set @num='a'
    select count(distinct 信息单号) from 表名 where 设备=@num
      

  3.   


    select 设备,max(cs) from (
    select 设备,count(1) as cs
    from mytable
    group by 信息单号,设备
    )a
    这样不是更快点?
      

  4.   

    SELECT distinct 信息单号,设备 FROM `csdn_test`  where 设备='a'
      

  5.   

    我想要的是同一字段中相同内容的值出现的频次,如果信息单号一样,算一次。比如我统计 a 出现的次数为2次,统计b出现的次数也为2次,统计c出现的次数为1次。这是我想要的正确结果。
      

  6.   

    最外层少个group by,觉得性能不见得比1#好,不过我没测试。
      

  7.   

    或者SELECT count(distinct(a.cid)) from csdn_test as a left join csdn_test as b on(a.st=b.st) where a.st='a' and a.cid!=b.cid
      

  8.   


    SELECT t.Enqu, count(t.infoso)cnt
    FROM #tp t
    WHERE NOT EXISTS(SELECT NULL FROM #tp p 
                     WHERE p.infoSo=t.infoSo 
                     AND p.Enqu=t.Enqu 
                     AND p.id>t.id)
    GROUP BY t.EnquEnqu       cnt
    ---------- -----------
    a          2
    b          2
    c          1(3 row(s) affected)
      

  9.   


    pt1314917,你好,你写的这些变量我在delphi中如何表示?能否指导一下。
      

  10.   

    SELECT count(distinct(a.信息单号)) from mytable  as a left join mytable  as b on(a.设备=b.设备) where a.设备='a' and a.信息单号!=b.信息单号
      

  11.   

    晕 我的语句太复杂了。。这个比较好。select count(distinct 信息单号) from 表名 where 设备=@num
      

  12.   

    晕 我的语句太复杂了。。这个比较好。select count(distinct 信息单号) from 表名 where 设备=@num
      

  13.   

    select 设备,count(设备) from (Select 信息单号,设备,count(设备) From mytable group by 信息单号,设备) mytable group by 设备
      

  14.   

    to zmjsg
    我试了,结果为0,不过还是谢谢了。
      

  15.   

    晕,declare @num varchar(20)
    set @num='a'
    这些东东在delphi中如何写
      

  16.   

    只是你程序中拼接SQL时传入到sql中的一个参数而已。
      

  17.   

    我将您的数据和表进行了设计,如下
    id    invoice  device
    1 1001 a
    2 1001 b
    3 1001 a
    4 1001 b
    5 1002 b
    6 1003 a
    7 1004 c写的SQL语句如下SELECT count(distinct [invoice]) as invoicecount,[device]
    FROM [master].[dbo].[mytable]
    group by device
    最终的结果如下
    invoicecount  device
    2        a
    2        b
    1        c
      

  18.   

    select '设备',count(distinct *) 出现次数
    from mytable
    where '设备'='a'
      

  19.   


    select count(1) as cnt,Enqu from #tp a where not exists (select 1 from #tp where a.Enqu=Enqu and a.infoSo=infoSo and id>a.id) group by a.Enqu 
      

  20.   


    --建表,借用1楼的表 o(∩_∩)o ~
    CREATE TABLE #tp
    (
        id INT IDENTITY,
        infoSo INT,
        Enqu VARCHAR(10)    
    )  
    INSERT INTO #tp
    SELECT 1001,'a'
    UNION ALL
    SELECT 1001,'b'
    UNION ALL
    SELECT 1001,'a'
    UNION ALL
    SELECT 1001,'b'
    UNION ALL
    SELECT 1002,'b'
    UNION ALL
    SELECT 1003,'a'
    UNION ALL
    SELECT 1004,'c'
    --查询
    SELECT Enqu,COUNT(DISTINCT infoSo) cnt FROM #tp
    GROUP BY Enqu
    --结果
    Enqu cnt
    a 2
    b 2
    c 1
      

  21.   

    --其实只要group by 信息单号,设备就行了select 设备,count(1) 设备数 
    from mytable
    group by 信息单号,设备
      

  22.   

    create table abc
    ( id int,
      信息单号 char(6),
      设备  char(6))INSERT INTO abc
    SELECT 1,'1001','a'
    UNION ALL
    SELECT 2,'1001','b'
    UNION ALL
    SELECT 3,'1001','a'
    UNION ALL
    SELECT 4,'1001','b'
    UNION ALL
    SELECT 5,'1002','b'
    UNION ALL
    SELECT 6,'1003','a'
    UNION ALL
    SELECT 7,'1004','c'
    select  distinct 信息单号, count(设备) from abc
    group by 信息单号,设备运行结果如下所示:信息单号 设备
     1001    2
     1002   1
     1003   1
     1004   1
      

  23.   

    --建表,借用1楼的表 o(∩_∩)o ~
    CREATE TABLE #tp
    (
        id INT IDENTITY,
        infoSo INT,
        Enqu VARCHAR(10)    
    )  
    INSERT INTO #tp
    SELECT 1001,'a'
    UNION ALL
    SELECT 1001,'b'
    UNION ALL
    SELECT 1001,'a'
    UNION ALL
    SELECT 1001,'b'
    UNION ALL
    SELECT 1002,'b'
    UNION ALL
    SELECT 1003,'a'
    UNION ALL
    SELECT 1004,'c'
    --查询
    SELECT Enqu,COUNT(DISTINCT infoSo) cnt FROM #tp
    GROUP BY Enqu
    --结果
    Enqu cnt
    a    2
    b    2
    c    1