2011-07-12 14 views
-1

を個別の項目をseletingながら、私は私のテーブルスキーマとデータこの問題T-SQL

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 2の例は7と8です。しかし、私のクエリは4つの企業を返します。 distinctキーワードを使用すると、必要な列の1つが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として選択することはできません。

+0

なぜ「TEXT」フィールドを使用して1文字を保存していますか? – JNK

+0

プロファイルは1文字のフィールドではありません。その会社のプロファイルデータをテキストとして、プレーンテキストまたは解析済みのhtmlタグで保持します。 –

+0

tbl_Companyの列です - プロフィール - テキスト - 会社のプロフィールを保持する –

答えて

2

メインクエリから別のものを削除して、代わりに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 
+0

私はそれにショットを与えることができます... –

+0

おかげで仕事は....私が正しい場合、私のフィルタ条件は、コメントのセクションになります... –

+0

@AmRan - はい、 CategoryIdに対するフィルタはサブクエリにあるはずですが、RegistrationDateに対するフィルタは、前と同じようにメインクエリに含める必要があります。 –