【问题标题】:Subsonic. Ambiguous column name using Group By亚音速。使用 Group By 的不明确列名
【发布时间】:2011-03-04 08:38:14
【问题描述】:

我正在使用带有 .net 2.0 的 subsonic 2.2,当我包含“Group By”时出现错误。

最初我有这段代码,它运行良好:

    SqlQuery etResourceTitle = new Select(ResTitleOngoing.Columns.ResourceTitleID,
                                          ResTitleOngoing.Columns.ResourceTitle, 
                                          VenVendor.Columns.Title,
                                          ResTitleOngoingStatus.Columns.Status).From(Tables.ResTitleOngoing);

    etResourceTitle.InnerJoin(ResTitleOngoingStatus.ResourceTitleIDColumn, ResTitleOngoing.ResourceTitleIDColumn);
    etResourceTitle.LeftOuterJoin(VenVendor.VendorIDColumn, ResTitleOngoing.VendorIDColumn);

    etResourceTitle.OrderAsc(ResTitleOngoing.Columns.ResourceTitle);

    etResourceTitle.ExecuteDataSet();

然后我添加了“分组依据”,所以这是我的代码:

    SqlQuery etResourceTitle = new Select(Aggregate.GroupBy(ResTitleOngoing.Columns.ResourceTitleID),
                                          Aggregate.GroupBy(ResTitleOngoing.Columns.ResourceTitle), 
                                          Aggregate.GroupBy(VenVendor.Columns.Title),
                                          Aggregate.GroupBy(ResTitleOngoingStatus.Columns.Status)).From(Tables.ResTitleOngoing);

    etResourceTitle.InnerJoin(ResTitleOngoingStatus.ResourceTitleIDColumn, ResTitleOngoing.ResourceTitleIDColumn);
    etResourceTitle.LeftOuterJoin(VenVendor.VendorIDColumn, ResTitleOngoing.VendorIDColumn);

    etResourceTitle.OrderAsc(ResTitleOngoing.Columns.ResourceTitle);

    etResourceTitle.ExecuteDataSet();

我收到错误:“列名不明确 'ResourceTitleID'。”

执行 etResourceTitle.BuildSqlStatement();我得到了:

选择 ResourceTitleID 为“GroupByOfResourceTitleID”, ResourceTitle AS 'GroupByOfResourceTitle', 标题为“GroupByOfTitle”, 状态为“GroupByOfStatus” FROM [dbo].[RES_TitleOngoing] 内部连接 ​​[dbo].[RES_TitleOngoingStatus] ON [dbo].[RES_TitleOngoing].[ResourceTitleID] = [dbo].[RES_TitleOngoingStatus].[ResourceTitleID] 左外连接 [dbo].[VEN_Vendor] ON [dbo].[RES_TitleOngoing].[VendorID] = [dbo].[VEN_Vendor].[VendorID] GROUP BY ResourceTitleID、ResourceTitle、标题、状态 按资源标题 ASC 排序

所以,有人可以帮我解决这个错误。

谢谢 艾伦

【问题讨论】:

    标签: .net subsonic


    【解决方案1】:

    您的表 RES_TitleOngoing 和 RES_TitleOngoingStatus 都包含一个名为 ResourceTitleID 的列,但您在分组中仅指定了 ResourceTitleID,因此 sql 服务器不知道您要分组哪个 ResourceTitleID。

    注意:

    ResTitleOngoing.Columns.ResourceTitleID
    

    只返回一个字符串“ResourceTitleID”

    您应该尝试以下方法之一:

    Aggregate.GroupBy(ResTitleOngoing.ResourceTitleIDColumn)
    Aggregate.GroupBy(ResTitleOngoing.Schema.QualifiedName + "."
                      + ResTitleOngoing.Columns.ResourceTitleID)
    

    【讨论】:

    • 谢谢施拉维纳。这解决了我的问题。我用 Aggregate.GroupBy(ResTitleOngoing.ResourceTitleIDColumn) Alan
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2020-04-09
    • 2011-01-31
    相关资源
    最近更新 更多