簡體   English   中英

SQl使用IIF比較同一行中的2個值

[英]SQl Use IIF to compare 2 values in same row

我在MS Access中使用SQL,需要連續比較2個值以確定第3個字段的結果。 在所有情況下,“ Yearmove”字段都不是一個值。 這是我正在運行的測試代碼

SELECT z.SCHOOL, z.Year as Year,  ProgBuild.BldgNo, ProgMoveBuild.yearmove AS Yearmove,
IIF([Year]=[Yearmove], 1, 0) AS Result

在“ Yearmove”為空白的情況下,結果很好,並按預期顯示0。 任何地方“ Yearmove”都有一個數字,“結果”字段顯示為“ #ERROR”,因此無論何時滿足和不滿足都滿足。 我嘗試用文本(例如“ 2014”)和非文本(例如2014)填充“ YEAR”字段,但是得到相同的結果。 所有數據均為數字。 結果的一部分如下所示:

SCHOOL  Year    BldgNo  Yearmove    Result
254     2014     254                   0
256     2014     256                   0
260     2014     260                   0
261     2014     261                   0
262     2014     202                   0
301     2014     301                   0
307     2014     307     2019        #ERROR
313     2014     313     2019        #ERROR
314     2014     314                   0
321     2014     321                   0
322     2014     322                   0

此查詢引發錯誤“條件表達式中的數據類型不匹配”

SELECT IIf('2014'=2014, 1, 0)

因此,我懷疑您的Yearyearmove字段是不同的數據類型:一種是數字;另一種是數字。 另一個是文字。

找出您要處理的數據類型...

SELECT
    z.Year,
    TypeName(z.Year) AS TypeOfYear,
    ProgMoveBuild.yearmove,
    TypeName(ProgMoveBuild.yearmove) AS TypeOfyearmove
FROM [whatever you have now as your data source(s)]

如果更改那些不實際的字段之一的數據類型,則可以將字段的值轉換為查詢中IIf條件的另一種類型。 CStr()將數字值轉換為字符串。 Val()將字符串值轉換為數字。 但是,當您給它們賦予Null時,這些函數中的任何一個都會抱怨。 因此,您可以在將值提供給CStr()Val()之前,使用Nz()替代Null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM