您好,现在有一个表 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次查询,然后将他们连接起来,谢谢
分别表示发票代码,发票号码,单位名和发票金额,发票代码和发票号码联合作为表的主键发票金额假设有3种:1元,5元,10元,一个单位可以对应多个发票现在我想查询一个结果集,大概的结构如下:单位名 1元发票个数 5元发票个数 10元发票个数
AA1 5 6 7
AA2 1 2 3请问有没有什么简便的方法,而不需要分3次查询,然后将他们连接起来,谢谢
解决方案 »
- 清华考博试题中出现的奇怪SQL符号,请高人解答
- 主表子表查询,sql2005,麻烦帮写下,自己写的查不出子表内容。
- Sql怎样实现字段的自动增长?
- 怎样用vc++连接SQL SERVER
- 从一个总类型表中如何创建两个视图(主类视图/子类视图),并在子类视图国表现出所属主类的关系
- 求一个SQL语句或过程:查出带条件的重复记录
- Reporting Serivice安装问题!!~~有会的来,我分蛮多的~~
- asp.net(c#)查询分析服务数据转换为DataTable形式
- 我数据库怎么会多出几张表(服务器上的数据库)?
- 这里高手多,来看看这个。
- 数据库字段自动生成
- 在WHILE循环内部和外部定义变量有什么区别
,count(case 发票金额=5 then 1 end) as 5元发票个数
,count(case 发票金额=10 then 1 end) as 10元发票个数
from tbInvoice
group by 单位名
,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
单位名,
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
单位名
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
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
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 单位名
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
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
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
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)