繁体   English   中英

用两个表的UNION对SQL Selects的某些列求和

[英]SUM some columns of SQL Selects with UNION of two tables

我有这个查询

SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_AS
WHERE (status = 'Paid' OR status = 'Available') AND platform = 'Sales'
GROUP BY Year(date), Month(date)
ORDER BY Year(date), Month(date)

样本结果:

Monthly | Annual | NumCad | Valor
      3 | 2014   |     62 | 72534
      4 | 2014   |      7 |  8253.6
      5 | 2014   |     42 | 45356.39
      6 | 2014   |     36 | 33343.19
      7 | 2014   |      5 |  4414.6

和这个查询

SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_PP
WHERE (status = 'Completed') AND platform = 'Sales'
GROUP BY Year(date), Month(date)
ORDER BY Year(date), Month(date)

样本结果:

Monthly | Annual | NumCad | Valor
      4 |   2014 |      6 | 2572.80
      5 |   2014 |      8 | 7828
      6 |   2014 |      3 | 3891.60
      7 |   2014 |      2 |  278.3

我尝试了UNION的查询:

SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_AS
WHERE (status = 'Paid' OR status = 'Available') AND platform = 'Sales'
GROUP BY Year(date), Month(date)
UNION
SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_PP
WHERE (status = 'Completed') AND platform = 'Sales'
GROUP BY Year(date), Month(date)
ORDER BY Year(date), Month(date)

但是,当我执行此操作时,它会在同一个月重复该行...我想要同一月的NumCadValorNumCad

UNION导致如下所示:

Monthly | Annual | NumCad | Valor
      6 |   2014 |      3 |  3891.60
      6 |   2014 |     36 | 33343.19
      7 |   2014 |      5 |  4414.6
      7 |   2014 |      2 |   278.3

但我想要这个:

Monthly | Annual | NumCad | Valor
      6 |   2014 |     39 | 37234.79
      7 |   2014 |      7 |  4692.9

任何想法?

首先,您需要对数据运行联合,然后进行聚合:

SELECT 
    Month(data.date) AS Monthly, 
    Year(data.date) AS Annual,
    COUNT(data.idcad) AS NumCad, 
    SUM(CONVERT(FLOAT, data.valorpag)) AS Valor 
FROM 
    (SELECT date, idcad, valorpag FROM PI_AS
    WHERE (status = 'Paid' OR status = 'Available') AND platform = 'Sales'
    UNION ALL
    SELECT date, idcad, valorpag  FROM PI_PP
    WHERE (status = 'Completed') AND platform = 'Sales'
    ) data
GROUP BY Year(data.date), Month(data.date)
ORDER BY Year(data.date), Month(data.date)

这应该可以解决您想要的问题:

SELECT Monthly, Annual, SUM(NumCad), SUM(Valor)
FROM
 (
  SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_AS
  WHERE (status = 'Paid' OR status = 'Available') AND platform = 'Sales'
  GROUP BY Year(date), Month(date)
  UNION
  SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_PP
  WHERE (status = 'Completed') AND platform = 'Sales'
  GROUP BY Year(date), Month(date)
 ) s
GROUP BY Annual, Monthly

将您的查询变成子查询并从中选择:

select monthly, annual, sum(numcad),sum(valor)
from
(SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_AS
WHERE (status = 'Paid' OR status = 'Available') AND platform = 'Sales'
GROUP BY Year(date), Month(date)
UNION
SELECT Month(date) AS Monthly, Year(date) AS Annual, COUNT(idcad) AS NumCad, SUM(CONVERT(FLOAT, valorpag)) AS Valor FROM PI_PP
WHERE (status = 'Completed') AND platform = 'Sales'
GROUP BY Year(date), Month(date)
)a
group by monthly, annual
 ORDER BY  monthly, annual

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM