数据列未正确合并 SQL Server

问题描述 投票:0回答:0

我正在尝试更好地创建数组。对于我的项目,我想合并/连接 6 个表,所有这些表都有一个 Country 列。每个表都显示 186 多行数据,但是当我尝试合并所有这些数据时,我要么得到 200 行大块的 NULL 行,要么得到少于 186 行并且缺少某些国家/地区。我想知道我做错了什么以及如何合并多个表但从每个表中获取所有不同的国家/地区。这是我的完整代码供参考:

DECLARE @VacationArray TABLE ([Country] nvarchar(50), [GDPPerCapita] decimal(8)
   , [GDPPerCapitaRank] decimal(8), [FemaleHeight] decimal(8,2), [MaleHeight] decimal(8,2)  
   , [HeightDifference] decimal(8,2), [CountryHeightRank] decimal(8), [FLifeExp] decimal(8) 
   , [MLifeExp] decimal(8), [MedianAge] decimal(8), [PopGrowth] decimal(8,2)
   , [UrbanPct] decimal(8,1), [UrbanPctRank] nvarchar(50), [AvgLifeExp] decimal(8)
   , [AvgLifeExpRank] varchar(50), [GDPPerCapitaAdjusted] decimal(8,2)
   , [MedAgeAvgLifeExpRatio] decimal(8,2), [GDPPerCapitaCategory] nvarchar(50))

INSERT INTO @VacationArray ([Country], [GDPPerCapita], [GDPPerCapitaRank], [FemaleHeight]
  , [MaleHeight], [HeightDifference], [CountryHeightRank], [FLifeExp], [MLifeExp]
  , [MedianAge], [PopGrowth], [UrbanPct])

SELECT h.[Country_Name], [GDPPerCapita], RANK() OVER (ORDER BY [GDPPerCapita] DESC)
  , [Female_Height_in_Inches], [Male_Height_in_Inches], [Difference], [Rank] 
  , [FemaleLifeExp], [MaleLifeExp], [Median_age], [Population_growth], [UrbanPercent]

FROM [featherman].[HWHeights] as h
  INNER JOIN [featherman].[HWGDPPerCapita] as gdp ON gdp.[Country] = h.[Country_Name]
  INNER JOIN [featherman].[HWlifeExpectancy] as le ON le.[Country_Name] = h.[Country_Name]
  INNER JOIN [featherman].[HWMedianAge] as ma ON ma.[Country_Name] = h.[Country_Name]
  INNER JOIN [featherman].[HWPopulationGrowth] as pg ON pg.[Country_Name] = h.[Country_Name]
  INNER JOIN [featherman].[HWurban_percent] as up ON up.[Country_Name] = h.[Country_Name]

GROUP BY h.[Country_Name], [GDPPerCapita], [Female_Height_in_Inches]
  , [Male_Height_in_Inches], [Difference], [Rank] , [FemaleLifeExp], [MaleLifeExp]
  , [Median_age], [Population_growth], [UrbanPercent] 

UPDATE @VacationArray SET [UrbanPctRank] = (CASE 
                               WHEN [UrbanPct] >= 60 THEN 'Mostly Urban'         
                               WHEN [UrbanPct] BETWEEN 50 AND 59 THEN 'Urban/Rural'
                               WHEN [UrbanPct] <= 49 THEN 'Mostly Rural'
                               END)

UPDATE @VacationArray SET [AvgLifeExp] = ([FLifeExp] + [MLifeExp])/2 

UPDATE @VacationArray SET [AvgLifeExpRank] = (CASE 
                      WHEN [AvgLifeExp] >= 80 THEN 'High Avg Life expectancy'        
                      WHEN [AvgLifeExp] BETWEEN 60 AND 79 THEN 'Normal Avg Life expectancy'      
                      WHEN [AvgLifeExp] <= 59 THEN 'Low Avg Life expectancy'    
                      END)

UPDATE @VacationArray SET [GDPPerCapitaAdjusted] = [GDPPerCapita]/[AvgLifeExp]

UPDATE @VacationArray SET [MedAgeAvgLifeExpRatio] = [MedianAge]/[AvgLifeExp]

UPDATE @VacationArray SET [GDPPerCapitaCategory] = (CASE        
                           WHEN [GDPPerCapitaRank] <= 20 THEN 'Expensive visit'     
                           WHEN [GDPPerCapitaRank] BETWEEN 21 AND 40 THEN 'Neutral Price'        
                           ELSE 'Cheap visit'   
                           END)

SELECT * 
FROM @VacationArray
GROUP BY [Country]```
arrays sql-server subquery sql-insert
© www.soinside.com 2019 - 2024. All rights reserved.