2013-10-29 62 views
0

我写了一个查询来从表中的一列中获取值,并在基于where子句的数据网格视图中的两列中表示它们。以下是该查询,SQL查询中的问题

Select ElectricityMachinePanelDetails.MachineDescription AS "Machine Name", 
    case when (ReadingCategoryID = 'RC001' AND ReadingTypesDetails.ReadingTypeID = 'RT001') 
    then ReadingValue 
    end as [Last Day Meter Reading], 
    case when (ReadingCategoryID = 'RC001' AND ReadingTypesDetails.ReadingTypeID = 'RT002') 
    then ReadingValue 
    end as [Current Day Meter Reading] 
    from ElectricityDailyMeterReadingDetails 
    INNER JOIN ElectricityMachinePanelDetails on ElectricityMachinePanelDetails.MachinePanelID = ElectricityDailyMeterReadingDetails.MachinePanelID 
    INNER JOIN ReadingTypesDetails ON ElectricityDailyMeterReadingDetails.ReadingTypeID = ReadingTypesDetails.ReadingTypeID 
    WHERE ReadingCategoryID = 'RC001' AND ReadingTypesDetails.ReadingTypeID = 'RT001' 

基于读类型ID的列改变为一个例子

值..如果我使用ReadingTypesDetails.ReadingTypeID = 'RT002'

Machine Name   Last Day Meter Reading Current Day Meter Reading                                                                                                                   
Transformer 01   NULL        60.000000                                                                                                                       
Transformer 02   NULL        60.000000                                                                                                                       
Transformer 03   NULL        80.000000 

如果我使用ReadingTypesDetails.ReadingTypeID ='RT001'

Machine Name   Last Day Meter Reading Current Day Meter Reading                                                                                                                   
Transformer 01   52.000000     NULL                                                                     
Transformer 02   55.000000     NULL      
Transformer 03   70.000000     NULL 

* 总是一列显示为NULL * ..有人可以帮助我吗?

+0

删除 “并ReadingTypesDetails.ReadingTypeID = 'RT001'”,并检查 – Snehal

回答

1

试试这个:从那里条件

Select ElectricityMachinePanelDetails.MachineDescription AS "Machine Name", 
     case when (ReadingTypesDetails.ReadingTypeID = 'RT001') then ReadingValue 
     end as [Last Day Meter Reading], 
     case when (ReadingTypesDetails.ReadingTypeID = 'RT002') then ReadingValue 
     end as [Current Day Meter Reading] 
from ElectricityDailyMeterReadingDetails 
INNER JOIN ElectricityMachinePanelDetails on ElectricityMachinePanelDetails.MachinePanelID = ElectricityDailyMeterReadingDetails.MachinePanelID 
INNER JOIN ReadingTypesDetails ON ElectricityDailyMeterReadingDetails.ReadingTypeID = ReadingTypesDetails.ReadingTypeID 
WHERE ReadingCategoryID = 'RC001' 
+0

从where子句中删除了ReadingTypesDetails.ReadingTypeID ='RT001'条件后,它给出了两列中的值,但机器被重复使用 – user2869887

+0

是的,这是因为一个MachinePanelID在ElectricityDailyMeterReadingDetails表中会有多个记录。 –

+0

有没有办法删除SQL中的多个机器值?像不同? – user2869887

1
case when (ReadingCategoryID = 'RC001' AND ReadingTypesDetails.ReadingTypeID = 'RT002') 

This will never evaluate to "true", as long as you are selecting rows... 

WHERE ... ReadingTypesDetails.ReadingTypeID = 'RT001' 
+0

我想带他们到一排。像 – user2869887

+0

它是否需要另一个'案件当'查询或有任何方式。感谢您的帮助 – user2869887