2013-10-29 57 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