请教一个级联查询的SQL语句,请进来看看

kucao 2015-02-06 03:28:36

两个表 [销售主表], [提成明细表]

[销售主表]
id, 商品名称, 销售额
1 商品1 1000
2 商品2 2000
3 商品2 3000

[提成明细表]
id, 主表id, 提成类型, 提成金额, 提成人
1 1 经理提成 100 张经理
2 1 店长提成 50 李店长
3 2 经理提成 150 刘经理
4 2 店长提成 80 孙店长

注:提成类型里只有两种固定的,就是:经理提成,和店长提成, 实际表中是用 0,1 代表两种提成类型的,这里为了大家好理解写成文字了
(实际程序中销售类型不只两种,会很多,但是是固定个数的,此处就写2条方便举例)

想搜索出下列的结果(想要列出销售记录时,同时在后面显示提成明细表中的提成金额)

销售主表id, 商品名称 销售额 经理提成金额, 店长提成金额
1 商品1 1000 100 50
2 商品2 2000 150 80
3 商品2 3000 0 0

请问这条SQL语句该如何写? 谢谢
...全文
284 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
C_B_Lu 2015-02-09
  • 打赏
  • 举报
回复
示例数据:
Select * Into #A From 
(
	Select 1 As Id,'商品1' As [商品名称], 1000 As [销售额] Union All
	Select 2,'商品2',     2000 Union All
	Select 3,'商品2',    3000
) T

Select * Into #B From
(
	Select 1 As Id,  1 As [主表Id],'经理提成' As [提成类型],100 As [提成金额],'张经理'  As [提成人] Union All
	Select 2,1,'店长提成',50,'李店长'Union All
	Select 3,2,'经理提成',150,'刘经理' Union All
	Select 4,2,'店长提成',80,'孙店长'
) T
查询语句:
;With Cte As
(
	Select #A.Id,#A.[商品名称],#A.[销售额],#B.[提成类型],#B.[提成金额],#B.[提成人]
	From #A Left Join #B ON #A.Id=#B.[主表Id]
)
Select Id,[商品名称],[销售额],SUM(CASE WHEN [提成类型]='经理提成' Then [提成金额] Else 0 End) As 经理提成金额,SUM(CASE WHEN [提成类型]='店长提成' Then [提成金额] Else 0 End) As 店长提成金额
From Cte
Group By Id,[商品名称],[销售额]
查询结果: Id 商品名称 销售额 经理提成金额 店长提成金额 ----------- ----- ----------- ----------- ----------- 1 商品1 1000 100 50 2 商品2 2000 150 80 3 商品2 3000 0 0 (3 行受影响)
Ekun_sky 2015-02-07
  • 打赏
  • 举报
回复
with 销售主表 as
(
 select 1 as id,'商品1' as 商品名称,1000 as 销售额 union all
 select 2 as id,'商品2' as 商品名称,2000 as 销售额 union all
 select 3 as id,'商品3' as 商品名称,3000 as 销售额
),提成明细表(id,主表id,提成类型,提成金额,提成人) as
(
 select 1,1,'经理提成',100,'张经理' union all
 select 2,1,'店长提成',50,'李店长' union all
 select 3,2,'经理提成',150,'刘经理' union all
 select 4,2,'店长提成',80,'孙店长'
)

  select * from 

   (select  b.id,b.商品名称,销售额,提成金额,提成类型

      from 提成明细表 as a right join 销售主表 as b 

          on a.主表id=b.id) as c pivot (max(提成金额)
     
             for 提成类型 in ([经理提成],[店长提成])) as d
             
/**
id  商品名称 销售额 经理提成  店长提成
--------------------------------------------
1	商品1	1000	100	     50
2	商品2	2000	150	     80
3	商品3	3000	NULL	NULL
---------------------------------------------
**/
Tiger_Zhao 2015-02-06
  • 打赏
  • 举报
回复
    SELECT m.id 销售主表id, 
m.商品名称,
m.销售额,
ISNULL(d1.提成金额,0) 经理提成金额,
ISNULL(d2.提成金额,0) 店长提成金额
FROM 销售主表 m
LEFT JOIN 提成明细表 d1
ON m.id = d1.主表id
AND d1.提成类型 = '经理提成'
LEFT JOIN 提成明细表 d2
ON m.id = d2.主表id
AND d2.提成类型 = '店长提成'

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧