![](/img/trans.png)
[英]SQL Server : compare row values in a group and update a field in the same table
[英]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)
因此,我懷疑您的Year和yearmove字段是不同的數據類型:一種是數字;另一種是數字。 另一個是文字。
找出您要處理的數據類型...
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.