SQL - 全部联合而不是加入

  • 本文关键字:全部 SQL sql sql-server
  • 更新时间 :
  • 英文 :


有人可以帮我弄清楚如何使用UNION ALL编写此脚本吗?目前它使用的是JOIN而不是UNION ALL

SELECT
    ISNULL(#vol2016.Destination, #vol2017.Destination) AS [Destination],
    ISNULL(#vol2016.[Volume 2016],0) AS [Volume 2016],
    ISNULL(#vol2017.[Volume 2017],0) AS [Volume 2017],
    ISNULL(#vol2017.[Volume 2017],0) - ISNULL(#vol2016.[Volume 2016],0) AS [Developement]
FROM(
    SELECT
        [year], [Destination], CAST(SUM([Volume]) as INT) as [Volume 2016] 
    FROM [dbo].[dw_lc_full_aggregated_1]
    WHERE [entry_type] = 'Country upload'
    AND [year]='2016'
    GROUP BY [year], [Destination]) #vol2016
FULL JOIN    
(SELECT
     [year], [Destination], CAST(SUM([Volume]) as INT) as [Volume 2017]
 FROM [dbo].[dw_lc_full_aggregated_1]
 WHERE [entry_type] = 'Country upload' AND [year]='2017'
 GROUP BY [year], [Destination]) #vol2017
ON [#vol2016].Destination=[#vol2017].Destination

因此,输出应分为三列。目的地,2016 年卷,2017 年卷。

使用此查询:

SELECT [year]
     , [Destination]
     , CAST(SUM([Volume]) as INT) AS [Volume]
  FROM
    (
        SELECT [year]
             , [Destination]
             , [Volume]
          FROM [dbo].[dw_lc_full_aggregated_1]
         WHERE [entry_type] = 'Country upload' AND [year]='2016'
        UNION ALL
        SELECT  [year]
              , [Destination]
              , [Volume]
          FROM  [dbo].[dw_lc_full_aggregated_1]
         WHERE  [entry_type] = 'Country upload' AND [year]='2017'
    ) AS T
GROUP BY [year],[Destination]

实际上你可以通过条件聚合(SUM()中的CASE语句(使生活变得更加简单

SELECT
    [Destination],
    [Volume_2016],
    [Volume_2017],
    [Volume_2017] - [Volume_2016]   AS [Development]
FROM
(
    SELECT
        [Destination],
        CAST(SUM(CASE WHEN [year] = '2016' THEN [Volume] END) as INT) [Volume_2016],
        CAST(SUM(CASE WHEN [year] = '2017' THEN [Volume] END) as INT) [Volume_2017]
    FROM
        [dbo].[dw_lc_full_aggregated_1]
    WHERE
            [entry_type] =  'Country upload'
        AND [year]       IN ('2016', '2017')
    GROUP BY
        [Destination]
)
    AS pivoted_agreggate

编辑:[Year]GROUP BY中删除(复制和粘贴错误(

最新更新