2012-06-22 28 views
-1

這是問題:當病人進入醫生辦公室時,他們可以將他們的血壓採取3次。第一次是bp1;第二個是bp2,最後一個是bp3。COALESCE與潛在的空字段 - SQL Server 2005

我需要找到病人最後一次檢查血壓的情況,以及它是什麼。我想我可以使用COALESCE(bp3,bp2,bp1)。然而;系統並不總是使未使用的字段爲空。有時候,它們是空的。

的數據的一個例子是:

PatientID BP1 BP2 BP3 12345 140/90三十零分之一百三十四
12346 NULL六十八分之一百二十八NULL

然後,我想我會使用COALESCE( NULLIF(bp3,bp2),bp1)但這不起作用,因爲有時數據庫對bp1顯示NULL或對bp1和bp3顯示NULL,但bp2中存在血壓。

任何人有任何想法如何解決這個問題?

謝謝!

+3

請顯示樣本數據和期望的結果。字問題很難。 –

回答

1

你將不得不單獨NULLIF每一列,使COALESCE語句的工作。

例如,

COASLESCE(NULLIF(bp3, 0), NULLIF(bp2, 0), NULLIF(bp1, 0)) 
1

情況如何?我不知道這個數據類型,所以我猜INT

case when bp3 > 0 then bp3 
    when bp2 > 0 then bp2 
    else bp1 
end as bp 

而對於字符串(VARCHAR)數據類型

case when len(bp3) > 0 then bp3 
    when len(bp2) > 0 then bp2 
    else bp1 
end as bp