SQL SELECT CASE WHEN问题

时间:2018-01-17 00:05:38

标签: sql sql-server group-by case aggregate-functions

G'全天,

我试图将大量数据整合在一起,而且我遇到了障碍,无法解决问题。我的Google-fu让我失望。

我知道我想要20行作为输出,我知道这是因为软件中有20条独特的记录,所以我试图将它们转储到csv。

我已写下以下内容

SELECT
ml.MeasurementLocationlName
,mav.DateTime
,MIN(CASE WHEN mal.AttributeName = 'Comment' THEN mav.Value END) As Comment
,MIN(CASE WHEN mal.AttributeName = 'View' THEN mav.Value END) As [View]
,MIN(CASE WHEN mal.AttributeName = 'X' THEN mav.Value END) As X
,MIN(CASE WHEN mal.AttributeName = 'Y' THEN mav.Value END) As Y
,MIN(CASE WHEN mal.AttributeName = 'Z' THEN mav.Value END) As Z
,MIN(CASE WHEN mal.AttributeName = 'Azimuth' THEN mav.Value END) As Azimuth
,MIN(CASE WHEN mal.AttributeName = 'Workplace' THEN mav.Value END) As Workplace
,MIN(CASE WHEN mal.AttributeName = 'PersonelPresent' THEN mav.Value END) As PersonelPresent
,MIN(CASE WHEN mal.AttributeName = 'RespiratoryProtection' THEN mav.Value END) As RespiratoryProtection
,MIN(CASE WHEN mal.AttributeName = 'SiteStatus' THEN mav.Value END) As SiteStatus
,MIN(CASE WHEN mal.AttributeName = 'ReasonForReading' THEN mav.Value END) As ReasonForReading
,MIN(CASE WHEN mtl.MeasurementType = 'Gas_O2' THEN mtv.Value END) As Gas_O2
,MIN(CASE WHEN mtl.MeasurementType = 'Gas_NH3' THEN mtv.Value END) As Gas_NH3
,MIN(CASE WHEN mtl.MeasurementType = 'Gas_LEL' THEN mtv.Value END) As Gas_LEL
,MIN(CASE WHEN mtl.MeasurementType = 'Width' THEN mtv.Value END) As Width
,MIN(CASE WHEN mtl.MeasurementType = 'Height_2' THEN mtv.Value END) As Height_2
,MIN(CASE WHEN mtl.MeasurementType = 'Height_av' THEN mtv.Value END) As Height_av
,MIN(CASE WHEN mtl.MeasurementType = 'Height_3' THEN mtv.Value END) As Height_3
,MIN(CASE WHEN mtl.MeasurementType = 'Temp_WB' THEN mtv.Value END) As Temp_WB
,MIN(CASE WHEN mtl.MeasurementType = 'Temp_DB' THEN mtv.Value END) As Temp_DB
,MIN(CASE WHEN mtl.MeasurementType = 'Airflow' THEN mtv.Value END) As Airflow
,MIN(CASE WHEN mtl.MeasurementType = 'Radiation' THEN mtv.Value END) As Radiation
,MIN(CASE WHEN mtl.MeasurementType = 'Pressure' THEN mtv.Value END) As Pressure
,MIN(CASE WHEN mtl.MeasurementType = 'Counts' THEN mtv.Value END) As Counts
,MIN(CASE WHEN mtl.MeasurementType = 'ESP_Efficiency' THEN mtv.Value END) As ESP_Efficiency
,MIN(CASE WHEN mtl.MeasurementType = 'Area' THEN mtv.Value END) As Area
,MIN(CASE WHEN mtl.MeasurementType = 'Volume' THEN mtv.Value END) As Volume
,MIN(CASE WHEN mtl.MeasurementType = 'Height_1' THEN mtv.Value END) As Height_1
,MIN(CASE WHEN mtl.MeasurementType = 'Gas_CO' THEN mtv.Value END) As Gas_CO
,MIN(CASE WHEN mtl.MeasurementType = 'XArea' THEN mtv.Value END) As XArea
,MIN(CASE WHEN mtl.MeasurementType = 'Gas_NO2' THEN mtv.Value END) As Gas_NO2
FROM
dbo.VMS_MeasurementAttributes_Values mav

        JOIN dbo.VMS_MeasurementAttributes_List mal ON
    mav.MeasurementAttributeID=mal.MeasurementAttributeID

        JOIN dbo.VMS_MeasurementLocations ml ON
    mav.MeasurementLocationID=ml.MeasurementLocationID

        JOIN dbo.VMS_MeasurementTypes_Values mtv ON
    ml.MeasurementLocationID=mtv.MeasurementLocationID

        JOIN dbo.VMS_MeasurementTypes_List mtl ON
    mtv.MeasurementTypeID = mtl.MeasurementTypeID

WHERE ml.MeasurementLocationlName = 'MS-44019'

GROUP BY ml.MeasurementLocationlName, mav.DateTime

当我返回预期的20行时,但由于我已经获得了MIN聚合,我只得到整个值的最小值 (对于' Airflow'我得到所有20行的0.3)

然后当我删除MIN聚合并将mal.AttributeNamemav.Valuemtl.MeasurementTypemtv.Value添加到我的GROUP BY条款中时,我得到了4859行,每行显示唯一值。

我的问题是,我需要做什么才能生成我知道需要的20个结果,还要为每个CASE表达式提供唯一值(包括NULL' s)?

编辑: 我上面的当前查询给出了以下输出(为清晰起见,省略了一堆列) Current Query Output

如您所见,由于MIN聚合,所有条目的气流均为0.3。 我想要得到的就是这个 Desired Query Output

0 个答案:

没有答案