使用IIF动态更改SQL语句

问题描述 投票:0回答:1

很简单的问题,但现在我被困了好几个小时。

我想将“性别”字段更改为喜欢这个如果性别为0,则1如果性别为1,则为2

这是我的代码:

Private Sub Run_Click()
    Dim db As DAO.Database
    Dim queryDef As DAO.queryDef
    Dim sql As String
    Dim fields As Variant

    Set db = CurrentDb
    sql = ""

    fields = Array("Name", "Gender", "Age")

    For Each queryDef In db.QueryDefs
        If queryDef.Name = "Q_List" Then
            db.QueryDefs.Delete "Q_List"
            Exit For
        End If
    Next

    sql = sql & "SELECT "
    For Each field In fields
        If field = "Gender" Then
            sql = sql & IIf([Gender] = 0, 1, 2) & " AS Gender, "
        Else
            sql = sql & "[" & field & "]" & ", "
        End If
    Next
    sql = Left(sql, Len(sql) - 2)
    sql = sql & " FROM T_Customer"
    Set queryDef = db.CreateQueryDef("Q_List", sql)

    DoCmd.TransferText acExportDelim, , "Q_List", "C:\customerdata\data.txt", True, , 65001

    MsgBox "Done!"

End Sub

问题是,IIF并不适用于所有数据行,但它确实比较了作为字符串的Gender是否等于0整数,并且我的所有Gender行都变为2 ...生成的Sql如下:

SELECT T_Customer.[Name], 2 AS Gender, T_Customer.[Age] FROM T_Customer

需要帮助请

解决了!!!

通过在SQL语句IN STRING中编写IIF,并使用相同的字段名称,如下所示:IIf([tablemame]。[Gender] = 0,1,2)&“AS Gender”,

sql vba ms-access iif
1个回答
2
投票

我想你省略了两个引号。如果在对象循环中后面的行应该是:

sql = sql & " IIf([Gender] = 0, 1, 2) " & " AS Gender, "

现在sql变量是

SELECT [Name],  IIf([Gender] = 0, 1, 2)  AS Gender, [Age] FROM T_Customer 
© www.soinside.com 2019 - 2024. All rights reserved.