2012-09-17 68 views
1

我收到SQL Server错误“一文ntext和image数据类型不能比较或排序,但使用时为空或像”在执行错误而使用GROUP BY子句

SELECT r.Shift, l.lab_title AS [Assigned Lab], u.user_name AS [L/A], 
     CONVERT(varchar(100), t.Time) + ' To ' + CONVERT(varchar(100), h.Time) AS Timing 
    FROM table_roaster_time_table AS r 
     INNER JOIN table_time AS t ON r.timeId = t.timeId AND r.timeId = t.timeId 
     INNER JOIN table_user AS u ON r.user_id = u.user_id 
     INNER JOIN table_labs AS l ON r.lab_id = l.lab_id 
     INNER JOIN table_time2 AS h ON r.timeId2 = h.timeId2 
GROUP BY r.Shift, l.lab_title, u.user_name 

不要知道什么是问题。我也使用聚合函数,只是为了形式化,但它不起作用。

回答

2

我猜你的r.Shift列是textntext类型。因此,它不能用于group by

一个选项可能是在可疑列上使用CAST,但可能会丢失数据。例如:

SELECT  r.Shift, l.lab_title AS [Assigned Lab], u.user_name AS [L/A], CONVERT(varchar(100),  t.Time) + ' To ' + CONVERT(varchar(100), h.Time) AS Timing 
FROM   table_roaster_time_table AS r INNER JOIN 
        table_time AS t ON r.timeId = t.timeId AND r.timeId = t.timeId INNER JOIN 
        table_user AS u ON r.user_id = u.user_id INNER JOIN 
        table_labs AS l ON r.lab_id = l.lab_id INNER JOIN 
        table_time2 AS h ON r.timeId2 = h.timeId2 
GROUP BY CAST(r.Shift as varchar(max), l.lab_title, u.user_name 

你也可以看看查询数据,而不text列,然后做第二查询来获取缺少的列。例如:

with temp as 
(
    SELECT  l.lab_title AS [Assigned Lab], u.user_name AS [L/A], CONVERT(varchar(100),  t.Time) + ' To ' + CONVERT(varchar(100), h.Time) AS Timing 
    FROM   table_roaster_time_table AS r INNER JOIN 
         table_time AS t ON r.timeId = t.timeId AND r.timeId = t.timeId INNER JOIN 
         table_user AS u ON r.user_id = u.user_id INNER JOIN 
         table_labs AS l ON r.lab_id = l.lab_id INNER JOIN 
         table_time2 AS h ON r.timeId2 = h.timeId2 
    GROUP BY l.lab_title, u.user_name 
) 
SELECT r.Shift, t.lab_title AS [Assigned Lab], t.user_name AS [L/A] --etc 
FROM   table_roaster_time_table AS r 
INNER JOIN temp as t 
on r.id = t.id --or whatver 

此外,该SQL似乎没有必要:

r.timeId = t.timeId AND r.timeId = t.timeId 
+0

我应该改变我这是在其使用,并具有文本作为一种数据类型的所有列? – IConfused

+0

更清楚地表明,假设以id结尾的变量是整数,GROUP BY子句中的一列是其中一种无法比较的类型。 – xception

+0

我不确定如果你需要它,我会改变它。有些选项可能会将其转换为varchar(max),或者可能会执行两个单独的查询,第一个分组不包括'ntext'列,第二次加入原始查询以获取ntext列... –