客户ID 客户名称 性别 年龄
1 张三 男 33
2 李四 男 28
3 王五 男 25
订单ID 水果名 客户ID 数量 金额
1 苹果 1 100 200
2 雪梨 2 250 750
3 雪梨 2 100 300
4 雪梨 1 150 450
5 苹果 2 100 200
6 苹果 2 100 200
7 雪梨 1 100 300
8 苹果 1 150 300
客户名称 性别 年龄 苹果总量 苹果总额 雪梨数量 雪梨金额
张三 男 33 250 500 250 750
李四 男 28 200 400 350 1,050
王五 男 25 0 0 0 0
金额显示千分符号,不保留小数位
可以实现么?在线等待高人解惑 拜谢啦~
------解决方案--------------------
- SQL code
create table [UserTB]([cliID] int IDENTITY (1,1) PRIMARY KEY ,[Uname] Char(10),[sex] Char(2),[Age] tinyint)create table [FruitTB]([OrderID] int IDENTITY (1,1) PRIMARY KEY ,[Fname] Char(10),[cliID] int ,[amount] int ,[Smoney] money)INSERT INTO [UserTB] (Uname,sex,Age) VALUES ('张三','男',33)INSERT INTO [UserTB] (Uname,sex,Age) VALUES ('李四','男',28)INSERT INTO [UserTB] (Uname,sex,Age) VALUES ('王五','男',25)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',1,100,200)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',2,250,750)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',2,100,300)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',1,150,450)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',2,100,200)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',2,100,200)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',1,100,300)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',1,150,300)goselect a.Uname 客户名称, a.sex 性别, a.Age 年龄, SUM(case when [Fname]='苹果' then [amount] else 0 end) as 苹果数量, SUM(case when [Fname]='苹果' then [Smoney] else 0 end) as 苹果金额, SUM(case when [Fname]='雪梨' then [amount] else 0 end) as 雪梨数量, SUM(case when [Fname]='雪梨' then [Smoney] else 0 end) as 雪梨金额from [UserTB] aleft join [FruitTB] bon a.cliID=b.cliIDgroup by a.Uname, a.sex, a.Age/*客户名称 性别 年龄 苹果数量 苹果金额 雪梨数量 雪梨金额------------------------------------------------李四 男 28 200 400.00 350 1050.00王五 男 25 0 0.00 0 0.00张三 男 33 250 500.00 250 750.00*/
------解决方案--------------------
- SQL code
create table [UserTB]([cliID] int IDENTITY (1,1) PRIMARY KEY ,[Uname] Char(10),[sex] Char(2),[Age] tinyint)create table [FruitTB]([OrderID] int IDENTITY (1,1) PRIMARY KEY ,[Fname] Char(10),[cliID] int ,[amount] int ,[Smoney] money)INSERT INTO [UserTB] (Uname,sex,Age) VALUES ('张三','男',33)INSERT INTO [UserTB] (Uname,sex,Age) VALUES ('李四','男',28)INSERT INTO [UserTB] (Uname,sex,Age) VALUES ('王五','男',25)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',1,100,200)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',2,250,750)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',2,100,300)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',1,150,450)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',2,100,200)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',2,100,200)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('雪梨',1,100,300)INSERT INTO [FruitTB] (Fname,cliID,amount,Smoney) VALUES ('苹果',1,150,300)go--动态实现:declare @str varchar(2000)set @str=''select @[email protected]+','+rtrim([Fname])+'数量=sum(case when rtrim([Fname])='+ QUOTENAME(rtrim([Fname]),'''')+' then [amount] else 0 end),' +rtrim([Fname])+'金额=sum(case when rtrim([Fname])='+QUOTENAME(rtrim([Fname]),'''') +' then [Smoney] else 0 end)'from [FruitTB]group by [Fname]print @strset @str='select a.[Uname] as 客户名称,a.[sex] as 性别,a.[Age] as 年龄' [email protected]+' from [UserTB] a left join [FruitTB] b on a.[cliID]=b.[cliID] group by a.[Uname],a.[sex],a.[Age]'exec(@str)/*客户名称 性别 年龄 苹果数量 苹果金额 雪梨数量 雪梨金额------------------------------------------------李四 男 28 200 400.00 350 1050.00王五 男 25 0 0.00 0 0.00张三 男 33 250 500.00 250 750.00*/