簡體   English   中英

在SQL Server中使用分組依據查詢獲取正確的結果

[英]Getting correct result with Group By query in SQL Server

我有以下查詢

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字段進行匯總,並將它們全部合並為一行。

您非常接近...僅是最后一個分組。

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

您可能希望求和的任何其他行都可以移出組,並在選擇行中將sum()放到該行上。

您需要找到某種方式來聚合其他列。

例如

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

您需要將..., s.Kolicina, ...更改為..., b.Kolicina, ...以從table b獲取SUM 您所做的只是從table s選擇所有Kolicina

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM