2012-04-13 14 views
1

私はモバイルアプリケーションにフィードするWebサービスを持っています。私は、製品の中にある各カテゴリのための単一のレコードに製品、カテゴリの製品とカテゴリを結合するクエリでサービスを介してアプリまでデータを送信する様々な理由のために:複雑なsql:結合テーブルの値が結合テーブルに設定されている場合、値は結合テーブルに設定されています。

SELECT * FROM 
    (SELECT ROW_NUMBER() OVER(ORDER BY Products.ItemID, Products.ManufacturerID) AS RowNum, 
     Products.ProductID, Products.ItemID, Products.ManufacturerID, Categories.CategoryID, Categories.CategoryName, CategoryProducts.CategoryProductID, Products.ItemName, Products.Description, Products.Notes, 
         Products.Dimensions, Products.BasePrice, Products.OrderMinimumQuantity, 
         ContainerMinimumQuantity = 
         CASE COALESCE(Products.ContainerMinQty, 0) 
          WHEN 0 THEN Products.OrderMinimumQuantity 
          ELSE Products.ContainerMinQty 
         END 
         , Products.OrderMultipleQuantity, Products.OnHandQuantity, 
         Products.Category, Products.IntroDate, Products.BackOrderDate, Products.UPC, Products.PriceLevel1, Products.PriceLevel2, Products.PriceLevel3, 
         Products.PriceLevel4, Products.PriceLevel5, Products.PriceLevel6, Products.PriceLevel7, Products.PriceLevel8, Products.PriceLevel9, Products.PieceBox, 
         Products.Cubes, Products.UnitOfMeasure, Products.UDF1, Products.UDF2, Products.UDF3, Products.UDF4, Products.UDF5, Products.AdditionalImageCount, 
        PhotoName= LOWER(Products.PhotoName), Products.Discontinued, Products.ModifiedOn, 
         CategoryProducts.IsDeleted, Products.PriceLevel10, Products.PriceLevel11, Products.PriceLevel12, Products.PriceLevel13, 
         Products.PriceLevel14, Products.PriceLevel15, Products.PriceLevel16, Products.PriceLevel17, Products.PriceLevel18, Products.PriceLevel19, Products.PriceLevel20, 
         Products.Weight, Products.DimensionsMetric, Products.Source, Products.InventoryStatus, Products.CatalogCode, Products.CatalogName, 
         CategoryProducts.SortOrder 
JOIN 
       Categories INNER JOIN 
         CategoryProducts ON Categories.CategoryID = CategoryProducts.CategoryID RIGHT OUTER JOIN 
         Products ON CategoryProducts.ManufacturerID = Products.ManufacturerID AND CategoryProducts.ItemID = Products.ItemID 
WHERE  (Products.ManufacturerID = @ManufacturerID) 
      AND 
      (Products.ModifiedOn > @tStamp OR CategoryProducts.ModifiedOn > @tStamp) 
) AS Products 
    WHERE RowNum >= @StartRow AND RowNum <= @EndRow 

これは私のすべてを与えます私の製品はどんなカテゴリーにもない製品を含めて平坦化されています。これが私が望むものです。この問題は、製品がカテゴリに属していて、そのカテゴリ製品が削除された場合、IsDeletedフラグがデバイスに届く単一のフラットレコードに設定されている場合に発生します。これは問題ですが、製品自体は削除されていませんが、カテゴリ製品ですが、デバイスではIsDeletedフラグが設定されたレコードが1つしか表示されません。したがってこの場合、削除された情報を含むフラット化された製品の行と、この製品の行が削除されていないかのように、ユーザーがデバイス上でこの製品を検索できるようにする必要があります。

私はこれを明確に説明してくれることを願っています。私は1週間この頭を叩いています。

+0

問題を確認するために、テーブル定義とサンプルデータを含めることができますか。特定のケースを分離するためにテーブル定義を単純化することができれば、それはまた多くの助けになります。 –

+0

私は実際に必要なクエリを取得しましたが、現在はローを行う方法を知る必要があります – Slee

+0

@Slee、必要なクエリがあればここで答えとして追加できますか?私は同様の問題を見ている。 – ilasno

答えて

0

2つの行を表示する必要がある場合は、サブクエリにUNION ALLが表示されます。私はあなたがすべての製品だけでなく、削除されていないすべての製品カテゴリを含める必要があると思う。

関連する問題