【发布时间】:2017-08-07 04:23:54
【问题描述】:
我正在使用 SQL Server 数据库,并且我编写了以下查询:
SELECT
"AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,"AM-Martin_bin".dbo.CpCore_Image.Bytes, "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode, "AM-Martin".dbo.CpCore_Site.Number
FROM
"AM-Martin".dbo.CpCore_Site
INNER JOIN
"AM-Martin".dbo.CpSm_Face on "AM-Martin".dbo.CpSm_Face.SiteId = "AM-Martin".dbo.CpCore_Site.Oid
INNER JOIN
"AM-Martin_bin".dbo.CpCore_Image on "AM-Martin".dbo.CpSm_Face.Oid = "AM-Martin_bin".dbo.CpCore_Image.OwnerId
WHERE
"AM-Martin".dbo.CpSm_Face.RetiredOn LIKE '%9999%'
AND "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LA%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LC%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%BH%'
AND "AM-Martin".dbo.CpCore_Site.Latitude > 0.0;
查询返回我需要的数据,但它复制了一些数据。当我尝试添加Distinct 以消除重复数据时...
SELECT DISTINCT
"AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,"AM-Martin_bin".dbo.CpCore_Image.Bytes, "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode, "AM-Martin".dbo.CpCore_Site.Number
FROM
"AM-Martin".dbo.CpCore_Site
INNER JOIN
"AM-Martin".dbo.CpSm_Face on "AM-Martin".dbo.CpSm_Face.SiteId = "AM-Martin".dbo.CpCore_Site.Oid
INNER JOIN
"AM-Martin_bin".dbo.CpCore_Image on "AM-Martin".dbo.CpSm_Face.Oid = "AM-Martin_bin".dbo.CpCore_Image.OwnerId
WHERE
"AM-Martin".dbo.CpSm_Face.RetiredOn LIKE '%9999%'
AND "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LA%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LC%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%BH%'
AND "AM-Martin".dbo.CpCore_Site.Latitude > 0.0;
它不允许我使用它,因为这个列"AM-Martin_bin".dbo.CpCore_Image.Bytes这个列是实际的图像数据。我得到的错误信息是:
错误:图像数据类型无法选择为 DISTINCT,因为它不可比较。错误代码:421
我正在尝试删除所有重复数据。要访问数据库,我使用的是 RazorSQL,远程数据库是使用 SQL Server 的 Microsoft Server 2008。
更新
我使用了 GROUP BY,它看起来像这样:
SELECT
"AM-Martin".dbo.CpCore_Site.Latitude,"AM-Martin".dbo.CpCore_Site.Longitude,"AM-Martin".dbo.CpSm_Face.RetiredOn,"AM-Martin_bin".dbo.CpCore_Image.Bytes, "AM-Martin".dbo.CpCore_Site.Name, "AM-Martin".dbo.CpCore_Site.Zipcode, "AM-Martin".dbo.CpCore_Site.Number
FROM
"AM-Martin".dbo.CpCore_Site
INNER JOIN "AM-Martin".dbo.CpSm_Face on "AM-Martin".dbo.CpSm_Face.SiteId = "AM-Martin".dbo.CpCore_Site.Oid
INNER JOIN "AM-Martin_bin".dbo.CpCore_Image on "AM-Martin".dbo.CpSm_Face.Oid = "AM-Martin_bin".dbo.CpCore_Image.OwnerId
WHERE
"AM-Martin".dbo.CpSm_Face.RetiredOn LIKE '%9999%'
AND "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LA%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LC%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%BH%'
AND "AM-Martin".dbo.CpCore_Site.Latitude > 0.0
GROUP BY "AM-Martin".dbo.CpCore_Site.Name;
现在我收到以下错误:
错误:列“AM-Martin.dbo.CpCore_Site.Latitude”在 选择列表,因为它不包含在任一聚合中 函数或 GROUP BY 子句。错误代码:8120
现在,如果我向组中添加更多列,它会一直对下一列说同样的话,直到我到达 "AM-Martin_bin".dbo.CpCore_Image.Bytes我收到以下错误消息:
错误:无法比较 text、ntext 和 image 数据类型或 已排序,除非使用 IS NULL 或 LIKE 运算符。错误代码:306
【问题讨论】:
-
在右列上使用GROUP BY 而不是 DISTINCT?
-
尝试使用
correlated subquery在select语句中投影该图像列,或者使用oracleROW_NUMBER()中的一些分析函数从重复项中获取一条记录。 -
我更新了我的问题以反映您的建议@Myonara
标签: sql sql-server database sql-server-2008