0

3つのテーブルsto_Product、sto_ProductXCategory、およびsto_Category

  • sto_Productには、すべての製品情報が含まれています(bvin = Primary Key)
  • sto_CategoryにはすべてのCategoryinfoがあります(bvin = Primary Key)
  • sto_ProductXCategory(ProductIdとCategoryIdはPKとFKです)

一部の製品がsto_ProductXCategory(異なるCategoryId)で重複しているため、現在、製品が重複しています。

このSQLステートメントはより大きなストアドプロシージャの一部であるため、同じように維持しようとしています。

これは私が修正しようとしているステートメントです

DECLARE @Sortorder int =6;
with product as  
(  
    select distinct p.* 
    from sto_Product p   
        inner join sto_ProductXCategory px on(p.bvin = px.productid)  
    where p.parentID = '' 
        and p.Status = 1 
        and p.siteprice >=0 
        and p.siteprice <= 2147483647 
        and ( 
                (p.manufacturerid = '8036ab2c-641e-487b-a577-76c09c5c3cc9'
                )
            ) 
),      
AllProducts AS 
    (
        SELECT   
            RowNum =       
                CASE        
                    WHEN @Sortorder = 0 
                        THEN ROW_NUMBER() OVER (ORDER BY px.SortOrder)       
                    WHEN @Sortorder  = 1 
                        THEN ROW_NUMBER() OVER (ORDER BY  px.SortOrder)      
                    WHEN @Sortorder  = 2 
                        THEN ROW_NUMBER() OVER (ORDER BY ProductName)       
                    WHEN @Sortorder  = 3 
                        THEN ROW_NUMBER() OVER (ORDER BY SitePrice)       
                    WHEN @Sortorder  = 4 
                        THEN ROW_NUMBER() OVER (ORDER BY SitePrice DESC)            
                    WHEN @Sortorder  = 6 
                        THEN ROW_NUMBER() OVER (ORDER BY ProductName DESC)       
                    ELSE ROW_NUMBER() OVER (ORDER BY px.SortOrder)      
                END,        
            p.* 
        from product p     
            inner join sto_ProductXCategory px on(p.bvin = px.productid) 
    )    
        SELECT AllProducts.RowNum,*, 
            (SELECT COUNT(*) FROM AllProducts) As TotalRowCount  
        FROM AllProducts 
        WHERE RowNum   BETWEEN (1) and (12 )     
    ORDER BY AllProducts.RowNum  

サンプルデータセット

sto_Product

  1. bvin、sku、ProductName、SitePrice
  2. 0001,001、AProductName、100
  3. 0002,002、BProductName、50
  4. 0003,003、CProductName、75

sto_Category

  1. bvin、CategoryName
  2. 1000、ACategoryName
  3. 2000、BCategoryName
  4. 3000、CCategoryName

sto_ProductXCategory

  1. ProductId、CategoryId、SortOrder
  2. 0001,1000,1
  3. 0001,2000,2
  4. 0001,3000,3
  5. 0002,2000,4
  6. 0003,2000,5
  7. 0003,3000,6

前もって感謝します

4

1 に答える 1

1

あなたはそれを述べました

...現在、一部の製品がsto_ProductXCategory(異なるCategoryId)で重複しているため、製品が重複しています。

しかし、あなたはそれがあなたが何をしたいのかを言っていません。

ここでの私の目的では、sto_ProductXCategoryに表示されるCategoryIDのさまざまな値を無視して、製品ごとに1つの行のみが必要であると想定します。

AllProductsには次のものがあります。

    from product p inner join sto_ProductXCategory px on(p.bvin = px.productid)

これを変更して、出力データセットに含めたくないsto_ProductXCategoryの重複行をフィルタリングする必要があります。

    from product p join (
        select productid, min(categoryid) as Category
        from sto_ProductXCategory 
        group by productid
      ) x on p.bvin = x.productid
      join sto_ProductXCategory px on p.bvin = px.Productid and x.Category = px.CategoryID

どのようだ?

于 2012-07-19T00:09:14.100 に答える