在T-Sql中选择Distinct项时出现问题

时间:2011-07-12 12:57:00

标签: sql sql-server tsql

我有我的表架构和类似这样的数据

CompanyCategoryId   SubCategoryId   CategoryId  CompanyId
      44                   22          1            7
      45                   23          1            7
      46                   24          1            7
      47                   10          2            7
      48                   11          2            8
      49                   12          2            8
      50                   16          2             7

您可以参考此 question 了解更多详情。我想要的是在这里根据categoryId显示不同的公司信息。例如对于CategoryId 2我们7和8.但我的查询返回4家公司。如果我使用distinct关键字,那么它会给出一个错误,即可以在数据类型Text上进行过滤,因为所需的列之一是text类型。

请帮帮我。我的查询

-- GET ALL COMPANIES REGISTERED IN THIS MONTH
DECLARE @Last30Day as date
SET @Last30Day = GETDATE() - 30
SELECT   DISTINCT   tbl_Company.CompanyName, tbl_Company.Website, tbl_Company.Email, tbl_Company.Profile,
           (ISNULL(tbl_Company.Address,'') + ', '+ISNULL(tbl_Company.City,'')+', '+ISNULL(tbl_Company.State,'')) AS Address, 
           tbl_Company.Phone1, tbl_Company.Mobile1
FROM         tbl_Company INNER JOIN
                      tbl_Company_Category_Map ON tbl_Company.CompanyId = tbl_Company_Category_Map.CompanyId
WHERE     (tbl_Company_Category_Map.CategoryId = 2) AND tbl_Company.RegistrationDate BETWEEN @Last30Day AND GETDATE()

错误:消息421,级别16,状态1,行5 无法将文本数据类型选为DISTINCT,因为它无法比较。

1 个答案:

答案 0 :(得分:1)

您可以从主查询中删除distinct,并在针对tbl_Company_Category_Map的子查询中使用它。如果您对tbl_Company_Category_Map有任何过滤条件,则应在子查询中添加这些条件。

select C.CompanyName -- extra fields here
from tbl_Company as C
  inner join (
               select distinct CompanyId
               from tbl_Company_Category_Map
               --where ? = ?
             ) as M
    on C.CompanyId = M.CompanyId