【问题标题】:SQL: Grouptext, ntext, and image data types cannot be compared or sortedSQL:无法比较或排序 Grouptext、ntext 和 image 数据类型
【发布时间】:2012-08-26 08:49:20
【问题描述】:

以下是我收到的一条 sql 语句和一个错误。我想按prodID 对所有返回的项目进行分组。

错误:

text、ntext 和 image 数据类型无法比较或排序, 除非使用 IS NULL 或 LIKE 运算符。

声明:

 SELECT TOP 20 
         PRODID, ITEMDES
         FROM orderedItems oi
         left join orders o on  oi.order_id = o.order_id
    Group by PRODID, ITEMDES

【问题讨论】:

  • ITEMDES 是数据库中的文本字段
  • ITEMDES是什么类型的字段?
  • 我只希望项目按 proid 分组,但我也需要字段 ITEMDESout 但我不想真正按此字段排序。
  • 如果您使用的是 Sql Server 2005 或更高版本,您可能会使用 varchar(max) 而不是 TEXT。
  • 您选择了 TOP 20 但未添加 ORDER BY。你知道你的查询会不时输出不同的结果吗?

标签: sql sql-server


【解决方案1】:

不,他们不能。此外,不推荐使用它们以支持(n)varchar(max) 类型。

如果您需要对它们进行分组,请将您的数据结构从 (n)text 更改为 (n)varchar(max) 或在您的 group 子句中进行转换

 GROUP BY ProdID, CONVERT(nvarchar(max), ItemDes)

【讨论】:

    【解决方案2】:

    如果 ITEMDES 是 TEXT 或 blob,您可以使用 ROW_NUMBER() 避免 GROUP BY:

    select TOP 20 * from 
    (
    
    SELECT 
             PRODID,ITEMDES,
             ROW_NUMBER() over (partition by PRODID order by o.order_id) rn
             FROM orderedItems oi
             left join orders o on  oi.order_id = o.order_id
    ) as t 
    where rn=1
    order by PRODID; -- any order here you wish
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2013-02-05
      • 2011-11-25
      • 2010-10-26
      • 2011-05-20
      相关资源
      最近更新 更多