sql合并重复的字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql合并重复的字段相关的知识,希望对你有一定的参考价值。

一句话搞定,这只是一个简单的交叉查询问题:
1.
方法1:
ACCESS有向导的,在查询视图里找到上面[插入]菜单,选择交叉查询,交叉查询要求,必须有值进行计算,必须有列进行分类,必须有行进行分组,但N个组只能交叉1列数据,所以你就该把
数量
的合计
作为值
产品型号
分组
作为列用来分类
其他字段
分组
作为行用来分组
明白没,如果还没明白就用代码
2.
方法2用代码:(看仔细我的代码怎么写的格式不能错)
TRANSFORM
Sum(数目)
as
数量合计
Select
订单号,
姓名,
商品单价,
配送方式,
数量合计*单价
as
商品金额,
IIF(配送方式=韵达快递,12,0)
as
配送金额,
配送金额+商品金额
as
金额合计
From
Order
Group
By
订单号,
姓名,
商品单价,
配送方式,
数量合计*单价,
iif(配送方式='韵达快递',12,0),
配送金额+商品金额
PIVOT
Order.产品型号;
看懂没,直接复制进去检查一下符号用一下.
交叉查询语句是这么写的:
TransForm
统计函数体
Select
分组行的字段名...字段名
From
表名
Group
By
分组的字段名
Pivot
作为列的字段名;
统计函数体就是交叉计算的结果,他叫
值,分组行的字段名,是作为行的,他的作用就是体现每条记录的详细特征,Group
By关键字是针对分组汇总的结束语,Pivot是将行转换成列,记住,只能计算一个列,
在SQL中和在ACCESS语句都可以实现,下面这些哥们没试过,不代表没办法实现,在数据库中这种算法很普遍,这叫做交叉查询
参考技术A 这个你要用交叉表来做,就是把表中的值作为字段来查询,你可以看看交叉表的使用 参考技术B 用case
语句来实现
select
订单号,姓名,
sum(
case
when
产品型号
=
'产品A'
then
数量合计
else
0
end)
as
产品A,
sum(
case
when
产品型号
=
'产品B'
then
数量合计
else
0
end)
as
产品B,
sum(
case
when
产品型号
=
'产品C'
then
数量合计
else
0
end)
as
产品C,
sum(数量合计)
as
数量合计,
sum(商品金额)
/
sum(数量合计)
as
商品单价,
sum(商品金额)
as
商品金额,
配送方式,
max(配送金额)
as
配送金额,
sum(商品金额)
+
max(配送金额)
as
金额合计
from
table1
group
by
订单号,姓名,配送方式
参考技术C 先说一下你的结果集中“配送金额”应该是每个顾客的合计,每笔12,邓01=24、沉沉=12、啊黄啊=36。
下面是用Oracle SQL语句,你把decode函数改成iif就可以了。
select 订单号,姓名,

sum(decode(型号,'产品A',数量合计)) 产品A,

sum(decode(型号,'产品B',数量合计)) 产品B,

sum(decode(型号,'产品C',数量合计)) 产品C,

sum(数量合计) 数量合计,商品单价,sum(商品金额) 商品金额,

配送方式,sum(配送金额) 配送金额,sum(金额合计) 金额合计
from TAB t group by 订单号,姓名,商品单价,配送方式 order by 订单号;

其中:order by 订单号 是排序输出,不需要可以删掉。

Hive SQL 表中去重复

比如,表A中有user_id和shop_id两个字段,现要求去除表A中user_id和shop_id两个字段都相同的记录,只保留一个,sorry 没有分了,xiexie了【可怜】!!!

参考技术A 抱歉,来晚了。SELECT user_id, shop_id FROM goods GROUP BY user_id, shop_id;

以上是关于sql合并重复的字段的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL如何判断如果某字段有重复就取其中一条?

SQL求助:对一个字段里重复数据,取出不同数据的前两个

SQL怎么合并表?

SQL如何删除2个字段的重复数据,如果重复了就只留一条数据,其他的删除,没有ID字段,在线等....急

MYSQL过滤表中某几个字段重复的数据

Hive SQL 表中去重复