簡體   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