首页
学习
活动
专区
圈层
工具
发布

复杂sql分组查询 ( pivot)

一个数据表里面字段有年、月、日、金额、支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行, 最后在增加一列小计当前的所有支付方式的金额。...如下图: 原sql查询出来的结果是这样的: ?...这可为难了我了,简单的增删改查左右链接sql语句我还会写,这个稍微复杂一点我就不知道如何下手了。该怎么分组,然后把行增加为列呢? 去找度娘搜的时候,都不知道怎么描述自己的想搜的关键字。...最后找了一位sql高手同学帮忙解决了这个问题, 人家只是一句简单的sql语句就把我的需求给实现了,实在是让我佩服!这个pivot关键是什么东东,我还第一次看见,从来没用过,这么强大!...( select * from #temp) AS t PIVOT (SUM(amount) FOR [PayType] IN ( [711], [BankIn],[iTunesHK])) AS t;

3.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句

    再跟主表连接, 然后得到一个最终一样的查询结果(格式),就能够减少子表的查询次数 这里将子表的结果“一次性将纵表的结果转换成横标”,是典型的行列转换操作 首先先看一下这里所说的一次转换成横标的这一步骤,需要借助pivot...然后看跟主表join之后,两种查询方式的整体查询结果 那么看一下后一种查询方式也即通过行业转换之后做join的执行计划,可以看到只对字表进行了一次查找(这里是index seek,但是暂抛开索引) 观察一下两条SQL...总结:   改写SQL是实现优化的思路之一,当然改写SQL技巧有很多种,本文仅对某一类典型查询提供一个改写思路,避免对一个表进行多次读取的方式来实现的查询。   ...通过改写一个常用的查询写法,从而实现一个等价的逻辑来减少对基表的读取次数来达到SQL优化的目的。   当然实际情况可能更加复杂,采用该思路改写的时候要注意针对SQL语句测试验证。...Key5的值' from HeaderTable a inner join (select HeaderId ,DetailKey ,DetailValues from DetailTable)t pivot

    2.3K90

    PIVOT函数–行转列

    首先我们来看下PIVOT函数的英文翻译: pivot:v 在枢轴上旋转(转动) 首先声明下PIVOT函数的语法格式为: SELECT [字段1,2,3…] FROM [表名] — 将从##TEST...AS [原表别名] PIVOT( [聚合函数] ( [原表字段1] ) FOR [原表字段2] IN ( [原表2值1],[原表字段2值2]… ) ) AS [新表别名] 下面以例子讲解PIVOT函数...VALUES('英语','小林',97) INSERT INTO ##TEST VALUES('英语','小龙',98) SELECT * FROM ##TEST 结果如下: 然后我们写一个PIVOT...PIVOT(SUM(score) FOR project IN([语文],[数学],[英语])) AS t 可能一下看不懂,在本文的开头我们提到PIVOT的英文含义是在枢轴上旋转,上述sql语句中,直译过来就是原表...这是因为除了PIVOT函数里出现的score和project字段外,原表p中的其他字段都将被GROUP BY,作为新表中的行,因为如此,使得PIVOT结果出现多行。

    5.4K20
    领券