0

一番売れている製品を探し、その情報を使って他の製品を見つけようとしています。ただし、最近、情報をデータベースの新しいテーブルに移動しました。新しいテーブルには新しいアイテム番号がありますが、古いオリジナルの一部のみです。古いテーブルに参加してすべてを取得すると、新しいテーブルには古いテーブルよりも多くのデータが含まれているため、それらは大幅に倍増します。

私は本当に言葉が多くて混乱しているので、ここに例を示します:

ItemName    ItemNo    ItemNo2   Size    Age     Type          Count  Sales      YearNew
Item1       AA123     AA123     ST      NULL    Accessories   1234   12334.56   2008
Item2       BB123     BB123     ST      Adult   Accessories   5643   98765.43   2006
Item3       CC123     CC123     ST      NULL    Accessories   1111   11111.11   2007
Item3b      CC123     CC123     ST      Adult   Accessories   1111   11111.11   2007
Item4       DD123     DD123     L       Kids    Costumes      333    7891.12    2011
Item4       DD123     DD123     L       Teen    Costumes      333    7891.12    2011

(これらの数字は明らかに作り話です)

Item3 と Item3b の唯一の違いは、ItemName と Age であることに注意してください。他のすべては同じです。しかし、それは異なり、すべてのフィールドでグループ化しているため、それらを 2 つのほとんど重複する行に分割しています。

ItemNo 列と ItemNo2 列を結合する方法はありますか? またはこれを解決する別の方法はありますか?

ただし、タイプまたは年齢を除いて、すべての列が同じである状況があることにも注意してください。この例の DD123 は、Age を除くすべての領域で同じであるため、同様に 2 つの行に分割されます。

それ以外の場合は、ItemName を除いてすべて同じです。それは至る所で異なります。

プログラミングに、彼らが残した古い項目番号を新しいテーブルに単純に追加するように依頼するように提案されました。それが最善の方法でしょうか、それとも私ができることはありますか?

データベースへのアクセスは読み取り専用なので、自分で変更を加えることはできません。

楽しみのために、私が現在使用しているクエリを次に示します。

select PM.ProductMasterName as ItemName,PM.ItemNumber as ItemNo,
    op.ItemNumber_obsolete as ItemNo2,
    OP.Size_obsolete as Size,Age.AgeSegment as Age,
    PT.ProductTypeDescription as Type,PM.Price,
    COUNT(PM.ItemNumber) as 'Count',
    (PM.Price*COUNT(PM.ItemNumber)) as Sales,
    YEAR(PS.DateCreated) as YearNew
from dbo.tblOrder O with (nolock)
    left outer join dbo.tblOrderProduct OP with (nolock)
        on O.OrderID=op.OrderID
    left outer join dbo.tblProductSize PS
        on OP.ItemNumber_obsolete=PS.ItemNumber_obsolete
            and OP.Size_obsolete=PS.Size_obsolete
    left outer join Product.ProductMaster PM with (nolock)
        on PM.ItemNumber=OP.ItemNumber_obsolete
            and PM.Price=OP.Price
    left outer join Product.ProductType PT
        on PM.ProductTypeID=PT.ProductTypeID
    left outer join Product.AgeSegmentToProductMaster ASPM
        on PM.ProductMasterID=ASPM.ProductMasterID
    left outer join Product.AgeSegment Age
        on ASPM.AgeSegmentID=Age.AgeSegmentID
where O.OrderDate >= '2012-01-01'
    and O.OrderDate < '2013-01-01'
group by PM.ProductMasterName,PM.ItemNumber,op.ItemNumber_obsolete,
    OP.Size_obsolete,PM.Price,Age.AgeSegment,
    PT.ProductTypeDescription,YEAR(PS.DateCreated)
order by Sales desc
4

2 に答える 2