使用字段类型“text”和SUM(amt)选择DISTINCT

时间:2014-09-23 08:22:00

标签: php sql sql-server-express

我遇到SQL查询问题:

这就是我想要做的事情:

"SELECT DISTINCT *, SUM(amt) AS ttl_amt FROM table WHERE..."

我的两个字段属于' text',SQL不允许将此类型选为DISTINCT,因为它们无法比较。

我需要对相关项目进行分组,并将它们显示为一行,其值为ttl_amt,如上所示。

我已经尝试过选择非文字' SELECT DISTINCT语句中的字段(varchar,float,int等)然后拉出'文本' while()循环中的字段使用另一个SQL查询,但该信息未显示(' text'字段)。

如果您需要更多信息,请与我们联系。

有什么想法吗?在SQL语法方面,我不是专家。

3 个答案:

答案 0 :(得分:2)

使用聚合函数时,如SUM()COUNT()AVG()等。SELECT部分中的所有其他字段都应位于<{1}}内em>聚合函数或应在GROUP BY中提及。 看来你真的希望SQL就是这样:

  select Field1, -- you can't use * here!
         Field2,
         ...
         FieldN,
         Sum(amt)
    from Table
group by Field1, -- you can't use * here!
         Field2,
         ...
         FieldN

group by使分组不同,因此您不需要任何其他DISTINCT

答案 1 :(得分:2)

您是否尝试使用group by语句而不是使用distinct?例如:

从表中选择field1,field2,field3,sum(field4),其中... group by field1,field2,field3;

问候

答案 2 :(得分:2)

你是对的:任何分组都不允许使用Text-Datatype。通过转换尝试
e.g。

SELECT DISTINCT convert(varchar(max),amt) AS ttl_amt FROM table WHERE 1=1

(*不应该以不同的方式使用)

编辑:varcharfield上的SUM是一个愚蠢的想法,抱歉。校正