更新 - 在SQL-92中完成的工作 我在SQL报告工具中工作并尝试将两个记录合并为一个。让我们说,因为有些重复,时间被分成两个值,因此重复。基本上应该添加任何不重复的值
class FileUpload(models.Model):
file = models.FileField(upload_to='documents', blank=True)
def __str__(self):
return self.file.name
class AnotherClas(models.Model):
file_upload = models.ForeignKey('FileUpload', on_delete=models.CASCADE, blank=True)
结果
wo---text---time---value
1----test---5------1
1----test---2------a
3----aaaa---3------1
4----bbbb---4------2
我试过了: 选择 .... 从....
GROUP BY wo SUM(时间)但是甚至没有工作。
答案 0 :(得分:1)
设置:
create table so48345659a
(
wo integer,
text varchar(4),
time integer,
value varchar(2)
);
create table so48345659b
(
wo integer,
text varchar(4),
time integer,
value varchar(2)
);
insert into so48345659a (wo, text, time, value) values (1, 'test', 5, '1');
insert into so48345659a (wo, text, time, value) values (1, 'test', 2, 'a');
insert into so48345659a (wo, text, time, value) values (3, 'aaaa', 3, '1');
insert into so48345659a (wo, text, time, value) values (4, 'bbbb', 4, '2');
insert into so48345659b (wo, text, time, value) values (1, 'test', 7, '1a');
insert into so48345659b (wo, text, time, value) values (3, 'aaaa', 3, '1');
insert into so48345659b (wo, text, time, value) values (4, 'bbbb', 4, '2');
Union,默认情况下会删除重复项
select wo, text, time, value from so48345659a
union
select wo, text, time, value from so48345659b;
结果:
wo | text | time | value
----+------+------+-------
1 | test | 7 | 1a
1 | test | 2 | a
3 | aaaa | 3 | 1
1 | test | 5 | 1
4 | bbbb | 4 | 2
(5 rows)
所以现在在联盟上运行总和
select
wo,
sum(time) as total_time
from
(
select wo, text, time, value from so48345659a
union
select wo, text, time, value from so48345659b
) x
group by
wo;
结果:
wo | total_time
----+------------
3 | 3
1 | 14
4 | 4
(3 rows)
根据你的补充质询(2017年1月22日),我猜你的意思是你有一个包含重复行的表。是吗?
如果是这样,它可能如下所示:
select * from so48345659c;
wo | text | time | value
----+------+------+-------
1 | test | 5 | 1
1 | test | 2 | a
3 | aaaa | 3 | 1
4 | bbbb | 4 | 2
1 | test | 7 | 1a
3 | aaaa | 3 | 1
4 | bbbb | 4 | 2
(7 rows)
那么你就得到了时间的总和,忽略了重复的行,如下所示:
select
wo,
sum(time) as total_time
from
(
select distinct wo, text, time, value from so48345659c
) x
group by
wo;
wo | total_time
----+------------
3 | 3
1 | 14
4 | 4
(3 rows)
答案 1 :(得分:0)
只需两个值即可:
select wo, text, sum(time) as time, concat(min(value), max(value)) as value
from t
group by wo, text;
这使用1
的标准表示形式的值小于a
这一事实。
大多数数据库支持某种字符串聚合(group_concat()
,listagg()
和string_agg()
是典型函数)。您可以使用其中一种方法获得更通用的解决方案。