sql 中的总和
sumProduct in sql
我正在尝试在服务器上的 table 中实现 sumproduct(来自 excel)。
select *
into #myTable2
from #myTable1
select
a,
b,
c,
d,
e,
(
select (c * e)/100*3423) from #myTable1 t1
inner join #myTable t2
on t1.b = t2.b
where b like 'axr%'
) as sumProduct
from #myTable1
但这不太奏效。无法发现错误,也许我只是累了或想念它。
编辑:
示例数据和预期结果
只会提及重要的栏目
c e b a sumProduct
2 4 axr1 2012.03.01 2*4 + 3*8
3 8 axr3 2012.03.01 2*4 + 3*8
7 5 axr23 2011.01.01 7*5 + 3*2
3 2 axr34 2011.01.01 7*5 + 3*2
EDIT2:
我需要一些语法方面的帮助。我正在尝试重写这部分:
select (c * e)/100*3423) from #myTable1 t1
inner join #myTable t2
on t1.b = t2.b
where b like 'axr%'
) as sumProduct
from #myTable1
为
case
when t.b like 'axr%' then
(sum(t.c * t.e) /100*3234) end as sumProduct from #myTable t
语法不正确,但应该可以这样工作
编辑 3:
让它工作像这样:
case
when b like 'axr%' then
(sum(c*e)/100*3423)end as sumProduct
并在代码末尾
group by --had an error without this
a,b,c,d,e
我如何为每个日期执行此操作(假设日期是 'a' 列或任何名称)。 如何在上面的代码中加入 over (partition by a)
?
想要
case
when b like 'axr%' then
(sum(c*e)/100*3423 over (partition by a))end as sumProduct
和积的语法在 SQL 中非常简单:
select sum(c * e)
from #mytable1;
我不太确定这如何适用于您的查询,其中似乎有其他逻辑。
编辑:
你想要一个 window 函数:
select t.*,
sum(c*e) over (partition by a)
from #mytable1;
真诚地,我还没有理解您的代码。但是假设您有两个具有值的表和一个唯一的 Id(用于连接),那么也许我的实现可以帮助您获得灵感:
-- create new DB or point to an existing one
use [test];
CREATE TABLE [dbo].[table1](
[id] [int] NOT NULL,
[value] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[table2](
[id] [int] NOT NULL,
[value] [int] NOT NULL
) ON [PRIMARY]
GO
insert into table1 values (1, 5), (2, 10);
insert into table2 values (1, 2), (2, 4);
select sum(P.products) as sumproduct from
(select (t1.value * t2.value) as products from table1 as t1 inner join table2 as t2 on t1.id = t2.id) as P
我正在尝试在服务器上的 table 中实现 sumproduct(来自 excel)。
select *
into #myTable2
from #myTable1
select
a,
b,
c,
d,
e,
(
select (c * e)/100*3423) from #myTable1 t1
inner join #myTable t2
on t1.b = t2.b
where b like 'axr%'
) as sumProduct
from #myTable1
但这不太奏效。无法发现错误,也许我只是累了或想念它。
编辑: 示例数据和预期结果
只会提及重要的栏目
c e b a sumProduct
2 4 axr1 2012.03.01 2*4 + 3*8
3 8 axr3 2012.03.01 2*4 + 3*8
7 5 axr23 2011.01.01 7*5 + 3*2
3 2 axr34 2011.01.01 7*5 + 3*2
EDIT2: 我需要一些语法方面的帮助。我正在尝试重写这部分:
select (c * e)/100*3423) from #myTable1 t1
inner join #myTable t2
on t1.b = t2.b
where b like 'axr%'
) as sumProduct
from #myTable1
为
case
when t.b like 'axr%' then
(sum(t.c * t.e) /100*3234) end as sumProduct from #myTable t
语法不正确,但应该可以这样工作
编辑 3: 让它工作像这样:
case
when b like 'axr%' then
(sum(c*e)/100*3423)end as sumProduct
并在代码末尾
group by --had an error without this
a,b,c,d,e
我如何为每个日期执行此操作(假设日期是 'a' 列或任何名称)。 如何在上面的代码中加入 over (partition by a)
?
想要
case
when b like 'axr%' then
(sum(c*e)/100*3423 over (partition by a))end as sumProduct
和积的语法在 SQL 中非常简单:
select sum(c * e)
from #mytable1;
我不太确定这如何适用于您的查询,其中似乎有其他逻辑。
编辑:
你想要一个 window 函数:
select t.*,
sum(c*e) over (partition by a)
from #mytable1;
真诚地,我还没有理解您的代码。但是假设您有两个具有值的表和一个唯一的 Id(用于连接),那么也许我的实现可以帮助您获得灵感:
-- create new DB or point to an existing one
use [test];
CREATE TABLE [dbo].[table1](
[id] [int] NOT NULL,
[value] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[table2](
[id] [int] NOT NULL,
[value] [int] NOT NULL
) ON [PRIMARY]
GO
insert into table1 values (1, 5), (2, 10);
insert into table2 values (1, 2), (2, 4);
select sum(P.products) as sumproduct from
(select (t1.value * t2.value) as products from table1 as t1 inner join table2 as t2 on t1.id = t2.id) as P