sql 语句汇总统计

zestsnake 2017-06-13 11:16:16

SELECT A.sale_user as '统一认证号',
d.username as '姓名' ,
E.branch_name as '网点名',
A.sale_num as '金额' ,
A.sale_kh as '卡号' , A.sale_typecust as '帐户名' ,
B.account_no as '卡号', B.ckkh_name as '帐户' ,(select cast(round(B.ye/10000,2,1) as decimal(18,2))) as '余额' ,
c.hz as '汇总', D.userrole ,
( CASE WHEN C.hz >70 THEN '完成'
WHEN D.userrole ='部门用户' and C.hz >80 then '完成'
WHEN B.ye IS NULL THEN '无记录' ELSE '未完成'
END ) 结果 ,
( CASE WHEN A.sale_num <= (select cast(round(B.ye/10000,2,1) as decimal(18,2))) then A.sale_num
WHEN A.sale_num > (select cast(round(B.ye/10000,2,1) as decimal(18,2))) then (select cast(round(B.ye/10000,2,1) as decimal(18,2))) end ) as sj,
A.sale_spzt as '审批状态',
A.sale_bizid as '业务号', A.sale_id as '编号' ,A.sale_typeid as '产品号',A.sale_branch as '网点号',
A.sale_sdate as '日期' ,A.sale_wdate as '时间'

FROM salemx AS A
LEFT JOIN ckkh AS B ON A.sale_kh = B.account_no


LEFT JOIN ( SELECT A.sale_user , SUM(B.ye) AS hz
FROM salemx AS A
LEFT JOIN ckkh AS B ON A.sale_kh = B.account_no
GROUP BY A.sale_user
) AS C ON A.sale_user = C.sale_user
lEFT JOIN users AS D ON A.sale_user = D.usernum
LEFT JOIN branch AS E ON D.userbranch = E.branch_num
where a.sale_bizid='25'
order by A.sale_user



( CASE WHEN A.sale_num <= (select cast(round(B.ye/10000,2,1) as decimal(18,2))) then A.sale_num
WHEN A.sale_num > (select cast(round(B.ye/10000,2,1) as decimal(18,2))) then (select cast(round(B.ye/10000,2,1) as decimal(18,2))) end ) as sj,



这里 我 生成了 一个 sj 的 列

能不能 根据 sale_user 把 sj 汇总下

就像这样


LEFT JOIN ( SELECT A.sale_user , SUM(B.ye) AS hz
FROM salemx AS A
LEFT JOIN ckkh AS B ON A.sale_kh = B.account_no
GROUP BY A.sale_user
) AS C ON A.sale_user = C.sale_user

...全文
276 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zestsnake 2017-06-13
  • 打赏
  • 举报
回复
成了 ,大神就是大神 能解释下

 SUM(CASE WHEN A.sale_num <= ( CAST(ROUND(B.ye / 10000, 2, 1) AS DECIMAL(18,
                                                              2)) )
                 THEN A.sale_num
                 WHEN A.sale_num > ( CAST(ROUND(B.ye / 10000, 2, 1) AS DECIMAL(18,
                                                              2)) )
                 THEN ( SELECT  CAST(ROUND(B.ye / 10000, 2, 1) AS DECIMAL(18,
                                                              2))
                      )
            END) OVER ( PARTITION BY A.sale_user ) AS sj ,
的 意思吗 特别是 OVER ( PARTITION BY A.sale_user )
中国风 2017-06-13
  • 打赏
  • 举报
回复
用以下方法测测 e,g,
SELECT  A.sale_user AS '统一认证号' ,
        D.username AS '姓名' ,
        E.branch_name AS '网点名' ,
        A.sale_num AS '金额' ,
        A.sale_kh AS '卡号' ,
        A.sale_typecust AS '帐户名' ,
        B.account_no AS '卡号' ,
        B.ckkh_name AS '帐户' ,
        ( SELECT    CAST(ROUND(B.ye / 10000, 2, 1) AS DECIMAL(18, 2))
        ) AS '余额' ,
        C.hz AS '汇总' ,
        D.userrole ,
        ( CASE WHEN C.hz > 70 THEN '完成'
               WHEN D.userrole = '部门用户'
                    AND C.hz > 80 THEN '完成'
               WHEN B.ye IS NULL THEN '无记录'
               ELSE '未完成'
          END ) 结果 ,
        SUM(CASE WHEN A.sale_num <= ( CAST(ROUND(B.ye / 10000, 2, 1) AS DECIMAL(18,
                                                              2)) )
                 THEN A.sale_num
                 WHEN A.sale_num > ( CAST(ROUND(B.ye / 10000, 2, 1) AS DECIMAL(18,
                                                              2)) )
                 THEN ( SELECT  CAST(ROUND(B.ye / 10000, 2, 1) AS DECIMAL(18,
                                                              2))
                      )
            END) OVER ( PARTITION BY A.sale_user ) AS sj ,
        A.sale_spzt AS '审批状态' ,
        A.sale_bizid AS '业务号' ,
        A.sale_id AS '编号' ,
        A.sale_typeid AS '产品号' ,
        A.sale_branch AS '网点号' ,
        A.sale_sdate AS '日期' ,
        A.sale_wdate AS '时间'
FROM    salemx AS A
        LEFT JOIN ckkh AS B ON A.sale_kh = B.account_no
        LEFT JOIN ( SELECT  A.sale_user ,
                            SUM(B.ye) AS hz
                    FROM    salemx AS A
                            LEFT JOIN ckkh AS B ON A.sale_kh = B.account_no
                    GROUP BY A.sale_user
                  ) AS C ON A.sale_user = C.sale_user
        LEFT JOIN users AS D ON A.sale_user = D.usernum
        LEFT JOIN branch AS E ON D.userbranch = E.branch_num
WHERE   A.sale_bizid = '25'
ORDER BY A.sale_user;
顺势而为1 2017-06-13
  • 打赏
  • 举报
回复
引用 7 楼 zestsnake 的回复:
[quote=引用 6 楼 shinger126 的回复:] 不明白你要怎么个汇总sj法,如果是对你贴的这个图片的结果进行汇总,那最简单的,在外面再包一层查询就行了
按照sale_user 对 sj汇总 LEFT JOIN ( SELECT A.sale_user , SUM(B.ye) AS hz FROM salemx AS A LEFT JOIN ckkh AS B ON A.sale_kh = B.account_no GROUP BY A.sale_user sum(b.ye) as hz 就是根据sale_user 同一个用户 b.ye 进行汇总[/quote] 那你照这个写法一样写,会出错吗?
zestsnake 2017-06-13
  • 打赏
  • 举报
回复
引用 6 楼 shinger126 的回复:
不明白你要怎么个汇总sj法,如果是对你贴的这个图片的结果进行汇总,那最简单的,在外面再包一层查询就行了
按照sale_user 对 sj汇总 LEFT JOIN ( SELECT A.sale_user , SUM(B.ye) AS hz FROM salemx AS A LEFT JOIN ckkh AS B ON A.sale_kh = B.account_no GROUP BY A.sale_user sum(b.ye) as hz 就是根据sale_user 同一个用户 b.ye 进行汇总
shinger126 2017-06-13
  • 打赏
  • 举报
回复
不明白你要怎么个汇总sj法,如果是对你贴的这个图片的结果进行汇总,那最简单的,在外面再包一层查询就行了
shinger126 2017-06-13
  • 打赏
  • 举报
回复
要不你把表结构和想要的结果贴出来
zestsnake 2017-06-13
  • 打赏
  • 举报
回复


就像 HZ列一样 ,根据条件生成的SJ列 再汇总下 ,多加个列也可以
shinger126 2017-06-13
  • 打赏
  • 举报
回复
引用 2 楼 zestsnake 的回复:
[quote=引用 1 楼 shinger126 的回复:] CASE WHEN A.sale_num <= (select cast(round(B.ye/10000,2,1) as decimal(18,2)) 这个select写的多余的,应该是CASE WHEN A.sale_num <= cast(round(B.ye/10000,2,1) as decimal(18,2)。另外,楼主要怎么个汇总法? sum( ( CASE WHEN A.sale_num <= cast(round(B.ye/10000,2,1) as decimal(18,2)) then A.sale_num WHEN A.sale_num > cast(round(B.ye/10000,2,1) as decimal(18,2)) then cast(round(B.ye/10000,2,1) as decimal(18,2)) end )) as sj 这样?
类似"HZ"列, 它是 sum(b.ye) 来的 ,我想再加一列 ,用sj 来汇总 [/quote] sj列是原来表里面就有的列还是你的查询中新加的列?
zestsnake 2017-06-13
  • 打赏
  • 举报
回复
引用 1 楼 shinger126 的回复:
CASE WHEN A.sale_num <= (select cast(round(B.ye/10000,2,1) as decimal(18,2)) 这个select写的多余的,应该是CASE WHEN A.sale_num <= cast(round(B.ye/10000,2,1) as decimal(18,2)。另外,楼主要怎么个汇总法? sum( ( CASE WHEN A.sale_num <= cast(round(B.ye/10000,2,1) as decimal(18,2)) then A.sale_num WHEN A.sale_num > cast(round(B.ye/10000,2,1) as decimal(18,2)) then cast(round(B.ye/10000,2,1) as decimal(18,2)) end )) as sj 这样?
类似"HZ"列, 它是 sum(b.ye) 来的 ,我想再加一列 ,用sj 来汇总
shinger126 2017-06-13
  • 打赏
  • 举报
回复
CASE WHEN A.sale_num <= (select cast(round(B.ye/10000,2,1) as decimal(18,2)) 这个select写的多余的,应该是CASE WHEN A.sale_num <= cast(round(B.ye/10000,2,1) as decimal(18,2)。另外,楼主要怎么个汇总法? sum( ( CASE WHEN A.sale_num <= cast(round(B.ye/10000,2,1) as decimal(18,2)) then A.sale_num WHEN A.sale_num > cast(round(B.ye/10000,2,1) as decimal(18,2)) then cast(round(B.ye/10000,2,1) as decimal(18,2)) end )) as sj 这样?
二月十六 版主 2017-06-13
  • 打赏
  • 举报
回复
引用 15 楼 zestsnake 的回复:
[quote=引用 14 楼 sinat_28984567 的回复:] [quote=引用 13 楼 zestsnake 的回复:] 大神有没有SQL 系统学习的网站提供下?
先把w3c的sql相关知识看看[/quote] 有连接吗?[/quote]http://www.w3school.com.cn/sql/index.asp
zestsnake 2017-06-13
  • 打赏
  • 举报
回复
引用 14 楼 sinat_28984567 的回复:
[quote=引用 13 楼 zestsnake 的回复:] 大神有没有SQL 系统学习的网站提供下?
先把w3c的sql相关知识看看[/quote] 有连接吗?
二月十六 版主 2017-06-13
  • 打赏
  • 举报
回复
引用 13 楼 zestsnake 的回复:
大神有没有SQL 系统学习的网站提供下?
先把w3c的sql相关知识看看
zestsnake 2017-06-13
  • 打赏
  • 举报
回复
大神有没有SQL 系统学习的网站提供下?
zestsnake 2017-06-13
  • 打赏
  • 举报
回复
引用 11 楼 roy_88 的回复:
这是SQL 2005版本开始提供的开窗函数 https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx
原来如此
中国风 2017-06-13
  • 打赏
  • 举报
回复
这是SQL 2005版本开始提供的开窗函数 https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx

34,588

社区成员

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

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