日期 支付方式 金额
1 点卡 10
1 直冲 20
2 点卡 30
2 直冲 40sql怎么实现如下:
日期 点卡 直冲
1 10 20
2 30 40
1 点卡 10
1 直冲 20
2 点卡 30
2 直冲 40sql怎么实现如下:
日期 点卡 直冲
1 10 20
2 30 40
解决方案 »
- 请问谁知道哪里有iPlanet Server Products 下载??
- 内部SQLSERVER错误
- SQL SERVER的导出问题
- access中的查询日期和sql2000中如何通用??
- 不使用循环可以做到吗?
- 请高手指教: sql server 2005 远程连接问题
- 紧急求助 sql server 2005 同步复制(非局域网内)
- 请教个问题,请方便给个例子谢谢了!
- 连接服务器中断的问题:sp_addlinkedserver 与 sp_addlinkedsrvlogin 好像都执行成功了
- 数据库备份。假设有两个数据库sjk1和sjk2。sjk1中有admin表。我想把sjk1中的admin存到sjk2中,
- 数据库中有关索引的一个问题
- sql2005 存储过程 解密 工具 注册码!
sum(case when 支付方式='点卡' then 金额 else 0 end) as 点卡,
sum(case when 支付方式='直冲' then 金额 else 0 end) as 直冲
from tb
group by 日期
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([日期] int,[支付方式] varchar(4),[金额] int)
insert [tb]
select 1,'点卡',10 union all
select 1,'直冲',20 union all
select 2,'点卡',30 union all
select 2,'直冲',40
---查询---
select 日期,
sum(case when 支付方式='点卡' then 金额 else 0 end) as 点卡,
sum(case when 支付方式='直冲' then 金额 else 0 end) as 直冲
from tb
group by 日期
---结果---
日期 点卡 直冲
----------- ----------- -----------
1 10 20
2 30 40(所影响的行数为 2 行)
日期 INT,
支付方式 VARCHAR(5),
金额 INT)
INSERT #TT
SELECT 1,'点卡',10 UNION ALL
SELECT 1,'直冲',20 UNION ALL
SELECT 2,'点卡',30 UNION ALL
SELECT 2,'直冲',40
SELECT 日期
,SUM(CASE WHEN 支付方式='点卡' THEN 金额 ELSE 0 END)
,SUM(CASE WHEN 支付方式='直冲' THEN 金额 ELSE 0 END)
FROM #TT
GROUP BY 日期
---查询---
declare @sql varchar(8000)
select @sql=isnull(@sql+',','')+'sum(case when 支付方式='''+支付方式+''' then 金额 else 0 end) as ['+支付方式+']'
from (select distinct 支付方式 from tb) t
exec ('select 日期,'+@sql+' from tb group by 日期')
---结果---
日期 点卡 直冲
----------- ----------- -----------
1 10 20
2 30 40
declare @test1 table(日期 int,支付方式 nvarchar(2),金额 int)
insert into @test1 select 1,'点卡',10
insert into @test1 select 1,'直冲',20
insert into @test1 select 2,'点卡',30
insert into @test1 select 2,'直冲',40
select 日期,sum(case when 支付方式 ='点卡' then 金额 else 0 end ) as 点卡 ,
sum(case when 支付方式 ='直冲' then 金额 else 0 end ) as 直冲
from @test1
group by 日期
go
create table [tb]([日期] int,[支付方式] varchar(4),[金额] int)
insert [tb]
select 1,'点卡',10 union all
select 1,'直冲',20 union all
select 2,'点卡',30 union all
select 2,'直冲',40
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT 日期'
SELECT @SQL=@SQL+',SUM(CASE WHEN 支付方式='''+支付方式+''' THEN 金额 ELSE 0 END)AS '''+支付方式+''''
FROM (SELECT DISTINCT 支付方式 FROM TB)AS T
--SELECT @SQL
EXEC(@SQL+' FROM TB GROUP BY 日期')(所影响的行数为 4 行)日期 点卡 直冲
----------- ----------- -----------
1 10 20
2 30 40