SQL IFF函数重复结果?

时间:2016-01-21 14:56:24

标签: sql-server

大家。

我的SQL查询大大困扰了我。基本上,查询被用于生成关于产品在几英亩土地上的使用情况的报告,我特别有两个问题。我想说我花了一些时间试图找到在线报告相同问题的例子或其他人,但对我来说最困难的部分是试图将问题写成文字......

首先,查询:

SELECT [GWPA].[FIELD #]
         ,[GWPA].Variety
         ,[GWPA].ProductID
         ,[GWPA].[Product Name]
         ,[GWPA].AppDate
         ,[GWPA].AppTime
         ,[GWPA].OperatorID
         ,[GWPA].[Units Applied]
         ,[GWPA].[Unit Type]
         ,[GWPA].Acres
         ,[GWPA].CropYear
         ,[GWPA].[Unit Price]
         --,SUM([HVFL].[Gross Weights])/100 AS GrossAsYieldPerField
         ,IIF([Load Type]='Gross Field',Sum([Gross Weights])/100,0) AS TotalAs
         ,IIF([Load Type]='B-Size',Sum([Gross Weights])/100,0) AS TotalBs

         ,(
         SELECT SUM([HVHV].Acres)

              FROM [PDOX].[harvest].[HARVEST] AS [HVHV]

              WHERE [HVHV].CYear = '2015'
         )
         AS TotalAcres

FROM [PDOX].[harvest].[FLDLOAD] [HVFL]
       INNER JOIN PDOX.growing.PESTAPPL AS [GWPA] ON [HVFL].[Field #] = [GWPA].[Field #]

WHERE [HVFL].CYear = '2015'

GROUP BY [GWPA].[FIELD #]
         ,[GWPA].Variety
         ,[GWPA].ProductID
         ,[GWPA].[Product Name]
         ,[GWPA].AppDate
         ,[GWPA].AppTime
         ,[GWPA].OperatorID
         ,[GWPA].[Units Applied]
         ,[GWPA].[Unit Type]
         ,[GWPA].Acres
         ,[GWPA].CropYear
         ,[GWPA].[Unit Price]
         ,[Load Type]

结果样本如下所示:

FIELD#|品种| ProductID |产品名称| AppDate | OperatorID |应用单位|单位类型|英亩| CropYear |单价| TotalAs | TotalBs | TotalAcres

C-03 | 2137S | VINE-01-104 |藤蔓延伸器| 7/25/2013 12:00:00 AM | Reabe | 42.5 | GAL。 | 85 | 2013 | 9.54 | 48730 | 0 |的 7368

C-05 | 1833S | 0000-00-100 |喷涂飞机| 6/9/1999 12:00:00 AM | Reabe | 62 | ACRE | 62 | 1999年| 4.05 | 0 | 60 |的 7368

C-05 | 1833S | 0000-00-100 |喷涂飞机| 6/9/1999 12:00:00 AM | Reabe | 62 | ACRE | 62 | 1999年| 4.05 | 36141 | 0 |的 7368

我为不那么出色的格式表示道歉,但我在其中加入了重要的部分,希望有所帮助。

  1. 首先,记录#2和记录#3应该是结果集中的一行,我希望看到第三个结果中的36141在TotalAs的第二个结果中上升到0点领域。我不确定为什么IFF函数似乎将它们分成单独的行,但希望有更多SQL知识的人能够快速解决这个问题。
  2. 其次,TotalAcres(最后一列)在所有三个记录中都是相同的。我不确定为什么子查询似乎只给出第一个FIELD#的结果并将其发布到所有记录中,但是如果我将查询输出并使用附加的where子句(AND)自己运行它并指定一个FIELD#,我实际上得到了正确的TotalAcres作为运行查询的结果。
  3. 如果有人能就这两个问题向我提供任何见解,我将不胜感激。我会在我的最后调查这个问题并发布我的发现,如果我在别人做之前想出来的话。

    非常感谢您的时间:)

1 个答案:

答案 0 :(得分:0)

问题是你没有使用IIF作为agregate,这也迫使你按[Load Type]分组 - 这显然是你真正想要的。

解决方案实际上非常简单 - 您仍然可以在聚合函数中使用case,因此您可以从组中删除[Load Type],并使用类似的东西来获取总和:

sum(case when [LoadType] = 'Gross Field' then [Gross Weights] else 0 end) / 100 as TotalAs,
sum(case when [LoadType] = 'B-Size' then [Gross Weights] else 0 end) / 100 as TotalBs,