1

我有以下查询

with CTE as 
(
  select Barkod, sum(kolicina) as Kolicina 
  from stocks
  where Barkod = '555'
  group by Barkod
)
select s.Barkod, s.Kategorija, s.Artikal, s.Opis, s.Kolicina, s.N_cena,
  s.N_Iznos, s.P_cena, s.P_Iznos, s.datum, s.Golemina from Stocks as s
join CTE as b 
  on b.Barkod = s.Barkod

此查询的结果是

555 КОШУЛА      QWRSF    QWRSF    10    10.00   NULL   20.00   NULL    NULL  NULL
555 КОШУЛА      QWRSF    QWRSF     1    10.00   NULL   20.00   NULL    NULL  NULL

我需要得到以下结果

555 КОШУЛА      QWRSF    QWRSF    11    10.00   NULL   20.00   NULL    NULL  NULL

所以我需要总结 Kolicina 领域并将所有内容排成一行。

4

3 回答 3

1

你非常接近......只是最后一个分组。

select s.Barkod, s.Kategorija, s.Artikal, s.Opis, sum(s.Kolicina), s.N_cena,
s.N_Iznos, s.P_cena, s.P_Iznos, s.datum, s.Golemina from Stocks as s
group by s.Barkod, s.Kategorija, s.Artikal, s.Opis,  s.N_cena,
s.N_Iznos, s.P_cena, s.P_Iznos, s.datum, s.Golemina

您可能想要求和的任何其他行都可以移出 group by 并将 sum() 放在 select 行中。

于 2013-09-09T17:49:57.537 回答
0

您需要找到某种方法来聚合其他列。

例如

select
    Barkod, 
    sum(kolicina) as Kolicina, 
    Max(Kategorija) as Kategorija,
    Max(Artikal) as Artikal, 
    Max(Opis) as Opis, 
    Max(N_cena) as N_cena,
    Max(N_Iznos) as N_Iznos, 
    Max(P_cena) as P_cena, 
    Max(P_Iznos) as P_Iznos, 
    Max(datum) as datum, 
    Max(Golemina) as Golemina
from 
    stocks
where 
    Barkod = '555'
group by 
    Barkod

不过,这种模式往往表明您的数据没有正确规范化。

或者,如果非求和列始终具有相同的 Barkod 值,您可以这样做:

select
    Barkod, 
    sum(kolicina) as Kolicina, 
    Kategorija,
    Artikal,
    Opis,
    N_cena,
    N_Iznos,
    P_cena,
    P_Iznos,
    datum,
    Golemina
from 
    stocks
where 
    Barkod = '555'
group by 
    Barkod,
    Kategorija,
    Artikal,
    Opis,
    N_cena,
    N_Iznos,
    P_cena,
    P_Iznos,
    datum,
    Golemina
于 2013-09-09T17:49:47.527 回答
0

您需要更改..., s.Kolicina, ...for..., b.Kolicina, ...才能SUMtable b. 你正在做的方式,你只是Kolicinatable s.

于 2013-09-09T17:57:19.840 回答