[英]Union two selects removing duplicates base on some columns (not the full row)
[英]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)
但是,当我执行此操作时,它会在同一个月重复该行...我想要同一月的NumCad
和Valor
的NumCad
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.