查询求和函数

时间:2014-08-26 17:33:52

标签: sql azure

嘿,伙计们......

我有这个问题,我需要在查询中包含SUM聚合函数,但我希望它在查询结果中特定于某处。最简单的是你可以看一下图片,也许你会知道我的意思和想要实现的目标。

我想要一个临时字段(例如SUM),我可以在最后加入 -

sum(l.cijenaKupovna) as SUM

代码:

SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna, sum(l.cijenaKupovna) from narudzbe n
    JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
    JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
    JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
    JOIN zaposlenici z ON z.OIB = n.OIB
    GROUP BY 2;

我得到了这个错误:消息164,级别15,状态1,行6 每个GROUP BY表达式必须至少包含一个不是外部引用的列。

这是我甚至可能要求的吗? :d enter image description here

3 个答案:

答案 0 :(得分:1)

您的GROUP BY子句需要包含您查询的每个列,但用于SUM的列除外。

答案 1 :(得分:1)

您需要GROUP BY那些您没有聚合的字段:

SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna, sum(l.cijenaKupovna) from narudzbe n
JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
JOIN zaposlenici z ON z.OIB = n.OIB
GROUP BY n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv

正如您在评论中所述,当您在GROUP BY中提取汇总值l.cijenaKupovna时,您将在最后两个字段中获得相同的数字。从技术上讲,当你这样做时,你仍然是SUM - 你的线,但你只是在每一行中执行你的总和。但是,当您从群组中移除l.cijenaKupovna时,除了此列之外的所有内容({1}}都会SUM

答案 2 :(得分:1)

尝试分析方式:

SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna, sum(l.cijenaKupovna) over() from narudzbe n
    JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
    JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
    JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
    JOIN zaposlenici z ON z.OIB = n.OIB

如果您只想显示一个值,则可以执行此操作:

SELECT n.datum, n.IdNarudzbe, l.naziv, l.proizvodac, z.prezime, d.naziv, l.cijenaKupovna, 
case when rownum = 1 then sum(l.cijenaKupovna) over() else null end case from narudzbe n
JOIN lijekovi_has_narudzbe ln ON ln.IdNarudzbe=n.IdNarudzbe
JOIN lijekovi l ON ln.serijskiBroj = l.serijskiBroj
JOIN dobavljaci d ON d.IdDobavljac = n.IdDobavljac
JOIN zaposlenici z ON z.OIB = n.OIB

我希望它可以帮到你。