您好,现在有一个表 tbInvoice表,里面有4个字段invoiceCode CHAR(12),invoiceID CHAR(8), orgName VARCHAR(128), money INT
分别表示发票代码,发票号码,单位名和发票金额,发票代码和发票号码联合作为表的主键发票金额假设有3种:1元,5元,10元,一个单位可以对应多个发票现在我想查询一个结果集,大概的结构如下:单位名  1元发票个数  5元发票个数  10元发票个数 
AA1         5           6             7
AA2         1           2             3请问有没有什么简便的方法,而不需要分3次查询,然后将他们连接起来,谢谢

解决方案 »

  1.   

    select 单位名,count(case 发票金额=1 then 1 end) as  1元发票个数
    ,count(case 发票金额=5 then 1 end) as  5元发票个数
    ,count(case 发票金额=10 then 1 end) as  10元发票个数
    from tbInvoice
    group by 单位名
      

  2.   

    SELECT orgName '单位名'
    ,SUM(CASE WHEN money=1 THEN 1 ELSE 0 END) '1元发票个数'
    ,SUM(CASE WHEN money=5 THEN 1 ELSE 0 END) '5元发票个数'
    ,SUM(CASE WHEN money=10 THEN 1 ELSE 0 END) '10元发票个数'
    FROM tbInvoice
    GROUP BY orgName 
      

  3.   

    select
      单位名,
      sum(case 发票金额 when 1 then 1 else 0 end) as 1元发票个数,
      sum(case 发票金额 when 5 then 1 else 0 end) as 5元发票个数,
      sum(case 发票金额 when 10 then 1 else 0 end) as 10元发票个数
    from
      tb
    group by
      单位名
      

  4.   

    select orgName,
           sum(case when 发票金额='1元发票' then 1 else 0 end)1元发票个数,
           sum(case when 发票金额='5元发票' then 1 else 0 end)5元发票个数,
           sum(case when 发票金额='10元发票' then 1 else 0 end)10元发票个数 
    from tbInvoice
    group by orgName
      

  5.   

    select orgName 单位名,
           sum(case invoiceID when 1 then 1 else 0 end) [1元发票个数],
           sum(case invoiceID when 5 then 1 else 0 end) [5元发票个数],
           sum(case invoiceID when 10 then 1 else 0 end) [10元发票个数]
    from tbInvoice
    group by orgName
      

  6.   


    SELECT 单位名,
           SUM(CASE WHEN 发票金额='1元发票' THEN 1 ELSE 0 END)1元发票个数,
           SUM(CASE WHEN 发票金额='5元发票' THEN 1 ELSE 0 END)5元发票个数,
           SUM(CASE WHEN 发票金额='10元发票' THEN 1 ELSE 0 END)10元发票个数 
    FROM TBINVOICE
    GROUP BY 单位名
      

  7.   

    select 
      orgName as [单位名],
      sum(case when [money]=1 then 1 else 0 end) as [1元发票个数],
      sum(case when [money]=5 then 1 else 0 end) as [5元发票个数],
      sum(case when [money]=10 then 1 else 0 end) as [10元发票个数]
    from
      tbInvoice
    group by
      orgName
      

  8.   

    发完了看一下,发现没一个写对的,不是字段名用中文就是对错号再不就是MONEY没加方括号
    SELECT orgName '单位名'
    ,SUM(CASE WHEN [money]=1 THEN 1 ELSE 0 END) '1元发票个数'
    ,SUM(CASE WHEN [money]=5 THEN 1 ELSE 0 END) '5元发票个数'
    ,SUM(CASE WHEN [money]=10 THEN 1 ELSE 0 END) '10元发票个数'
    FROM tbInvoice
    GROUP BY orgName 
      

  9.   

    select orgName 单位名,
           sum(case [money] when 1 then 1 else 0 end) [1元发票个数],
           sum(case [money] when 5 then 1 else 0 end) [5元发票个数],
           sum(case [money] when 10 then 1 else 0 end) [10元发票个数]
    from tbInvoice
    group by orgName
      

  10.   


    declare @tb table([invoiceCode] varchar(3),[invoiceID] varchar(2),[orgName] varchar(5),[money] int)
    insert @tb
    select 'AA1','B1','单位1',1 union all
    select 'AA1','B1','单位2',5 union all
    select 'AA1','B1','单位1',5 union all
    select 'AA1','B1','单位2',1 union all
    select 'AA1','B1','单位1',1 union all
    select 'AA1','B1','单位2',10 union all
    select 'AA1','B1','单位2',10 union all
    select 'AA1','B1','单位1',10 union all
    select 'AA1','B1','单位2',10;WITH CTE AS
    (
    SELECT [orgName], CAST([money] AS  NVARCHAR(5))+'元发票个数' AS [money],COUNT([money]) AS I
    FROM @tb
    GROUP BY [orgName], CAST([money] AS  NVARCHAR(5))+'元发票个数'
    )select * 
    from CTE
    PIVOT
    (
    SUM(i)
    FOR [money]
    in([1元发票个数],[5元发票个数],[10元发票个数])

    ) p/*
    orgName 1元发票个数      5元发票个数      10元发票个数
    ------- ----------- ----------- -----------
    单位1     2           1           1
    单位2     1           1           3(2 row(s) affected)