2012-12-03 96 views
1

好吧,我很抱歉模糊标题COS我不知道如何把这个。 这是我的问题。使用Aggregate来总结行SQL

CREATE TABLE dwd_temp (con VARCHAR2(10),line_no VARCHAR2(10),wgt NUMBER,pallet  VARCHAR2(10)); 
insert INTO dwd_temp VALUES('a','1',10,NULL); 
insert INTO dwd_temp VALUES('b','1',11,'x'); 
insert INTO dwd_temp VALUES('b','2',12,'x'); 
insert INTO dwd_temp VALUES('b','3',13,'y'); 

现在我的要求就是要“取代”具有相同的“托盘” 是在结束我需要一个查询有一条线,上面写着 B,1,23线,X代替托盘为'x'的两条线。 所以我的结果应该是

a   1   10   null 
b   1   23   x 
b   3   13   y 
+0

在你结果你有一个,C列在4列,这是不存在于源数据。另外我不明白为什么在3列和最后一列有15个结果。 – sufleR

+0

抱歉 - 我错误地使用了一个不同的例子。 –

回答

0
select con, min(line_no), sum(wgt), pallet 
from dwd_temp 
group by con, pallet 
+0

这是行不通的,因为你按line_no(1和2)分组,但首选结果只有1。 – sufleR

+0

@ sufleR:你说得对。我纠正了这一点。 –

1

VARCHAR2建议你使用的是Oracle数据库。

select 
    con, min(line_no), sum(wgt), pallet 
from dwd_temp 
group by pallet, con; 

select 
    min(con), min(line_no), sum(wgt), pallet 
from dwd_temp 
group by pallet; 

SQLFiddle

答案将取决于你想要什么分组做。

+0

感谢您的回答!是的,我正在使用oracle,但我需要在SQLSERVER上运行查询 - 目前正在使用的计算机上安装了Oracle,所以我正在使用它。 –

+0

@PaulusNijmaan这两个答案都应该在SQLServer上工作。开发时应避免使用两种不同的RDMS环境。这将在未来避免许多问题。 – sufleR