我意识到这已经在某处发布,但由于关键字密度,我无法找到它。
我目前有以下查询:
SELECT COUNT(t2.*), t1.t2id, t1.c2
FROM t1
LEFT JOIN t2 ON t1.t2id = t2.t2id
GROUP BY t1.t2id
注意t2id
是nchar(256)
,t1.c2是ntext
。
所以基本上我想计算t1中每个值记录有多少t2,并从t1获取一些值。现在的问题是,当我在c#中执行此操作时,我得出错误
类型'System.Data.SqlClient.SqlException'的未处理异常 发生在System.Data.dll
中附加信息:列't1.c2'在选择列表中无效 因为它不包含在聚合函数或 GROUP BY子句。
但GROUP BY t1.t2id
不应该确保不会发生这种情况吗?
答案 0 :(得分:2)
你需要
SELECT COUNT(t2.*), t1.t2id, t1.c2
FROM t1 LEFT JOIN t2 ON t1.t2id = t2.t2id
GROUP BY t1.t2id, t1.c2
r1.c2不在聚合(计数)或组中,因此需要进入一个。
编辑:处理t1.c2为ntext
SELECT COUNT(t2.*), t1.t2id, cast(t1.c2 as nvarchar(max))
FROM t1 LEFT JOIN t2 ON t1.t2id = t2.t2id
GROUP BY t1.t2id, cast(t1.c2 as nvarchar(max))
如果您的c2列的内容比nvarchar(max)更多可以解决您的问题,那么性能也不会很好但是如果它出现问题就不知道您有多少数据很难说
答案 1 :(得分:1)
问题是,正如错误消息所示,您需要在以下内容中传递t1.c2
到GROUP BY
子句:
string query = "SELECT COUNT(t2.*),t1.t2id,t1.c2 FROM t1 LEFT JOIN t2 ON t1.t2id = t2.t2id GROUP BY t1.t2id, t1.c2";
答案 2 :(得分:0)
一般规则是所有不属于聚合函数的列都应出现在GROUP BY子句中。您需要在group by子句
中添加t1.c2SELECT COUNT(t2.*), t1.t2id, t1.c2
FROM t1 LEFT JOIN t2 ON t1.t2id = t2.t2id
GROUP BY t1.t2id,t1.c2