带有SUM的SQL QUERY UNION ALL

时间:2019-08-26 10:32:02

标签: sql sql-server

我有一个查询代码,该代码给我结果,但我想对同一行结果求和。我做不到,有什么办法做吗?

xact_start

my result

例如,1828 x 488应该是2,而不是两次。

3 个答案:

答案 0 :(得分:0)

我认为您想取消数据透视,然后进行汇总:

SELECT cam, cam1aciklama, en_x, boy_y,
       SUM(adet_z) as adet_z, SUM(toplam_m2) as toplamm2 
FROM ((SELECT cam_1 as cam, cam1aciklama, en_x, boy_y, adet_z, toplam_m2, Siparis_no, STOKTIPI
       FROM siparis_detay 
      ) UNION ALL
      (SELECT cam_2, cam1aciklama, en_x, boy_y, adet_z, toplam_m2, Siparis_no, STOKTIPI
       FROM siparis_detay 
      ) UNION ALL
      (SELECT cam_3, cam1aciklama, en_x, boy_y, adet_z, toplam_m2, Siparis_no, STOKTIPI
       FROM siparis_detay 
      ) 
     ) s
WHERE Siparis_no = '901405' AND
      STOKTIPI IN ('1', '2') AND
      cam <> ''   -- this eliminates `NULL` as well
GROUP BY cam, en_x, boy_y, cam1aciklama ;

注意:如果Siparis_noSTOKTIPI是数字,则比较值不应使用单引号。

答案 1 :(得分:0)

首先合并,然后求和:

select cam_1 as cam, cam1aciklama as acıklama, en_x, boy_y, 
    sum(adet_z) as adet_z, sum(toplam_m2) as toplamm2
from
(SELECT cam_1, cam1aciklama, en_x, boy_y, adet_z, toplam_m2 
    FROM siparis_detay 
    Where Siparis_no= '901405' and (STOKTIPI='1' or STOKTIPI='2') and cam_1 Is Not NULL And cam_1 <> '' 
    union all 
SELECT cam_2, cam2aciklama, en_x, boy_y, adet_z, toplam_m2 
    FROM siparis_detay 
    Where Siparis_no= '901405' and (STOKTIPI='1' or STOKTIPI='2') and cam_2 Is Not NULL And cam_2 <> '' 
    union all 
    SELECT cam_3, cam3aciklama, en_x, boy_y, adet_z, toplam_m2 
    FROM siparis_detay 
    Where Siparis_no= '901405' and (STOKTIPI='1' or STOKTIPI='2') and cam_3 Is Not NULL And cam_3 <> '') tmp 
    GROUP BY cam_1, en_x, boy_y, cam1aciklama
    order by en_x desc;

可能无需联合和单个查询就可以更轻松地编写此代码,但是我们不了解详细信息,也没有示例数据。

答案 2 :(得分:0)

您可以使用UNION代替UNION ALL。如果使用UNION,最终将只能获得不同的数据。