1

モバイルアプリにフィードするWebサービスがあります。さまざまな理由から、製品、カテゴリ製品、およびカテゴリを、製品が含まれる各カテゴリの単一のレコードに結合するクエリを使用して、サービスを介してアプリにデータを送信します。

 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フラグが設定された単一のレコードのみが削除されているために問題になります。したがって、この場合、情報が削除されたフラット化された製品の行と、ユーザーがデバイスでこの製品を検索できるように、削除されていないかのようにこの製品の行の両方が必要です。

うまくいけば、私はこれを明確に説明しました、私はこれに一週間頭をぶつけてきました。

4

1 に答える 1

0

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

于 2012-04-13T20:38:15.427 に答える