1

いくつかの製品を説明する何千行ものテーブルがあります。製品の機能に関する複数の列があります。例えば

productid productname isOnSale HasVeteranDiscount IsTaxExempt Otherdata1 Otherdata2 ...
1         rice        0                  1        1          info1      info2
2         camera       1        0                   0         info3      info4

別のテーブル

[Productparts]
Partid parentproductid isGeneric CanBeSoldSeperate OtherData1 Otherdata2 ...

別の表:

ProductId ItemsSold Datesold
1          23        4/20/2013   

productfeature を説明する列挙型があります。

[Flags]
public enum ProductFeature : short
{
    None = 0,
    isOnSale = 0x001,
    HasVeteranDiscount = 0x002, 
    IsTaxExempt = 0x004, 
    isGeneric = 0x008, 
    CanBeSoldSeperate = 0x010,
}

統計分析のために、3 つのテーブルからの上記のデータを、該当するすべての製品機能のビットごとの or 演算された整数として、そのカテゴリに分類される製品の数と、次のような製品の販売数とともに 1 つのテーブルに挿入する必要があります。

ProductTrend
ProductFeatures ItemsSold MonthSold

たとえば、ある製品が販売されていて、一般的な部品が 1 つ以上あり、個別に販売できる部品が 1 つ以上ある場合、その 25 です。別の製品には、ベテラン割引があり、個別に販売できる部品が 1 つ以上ある場合、その 18 [HasVeteranDiscount] | | CanBeSoldSeperate = 18] テーブルは次のようになります。

ProductTrend
ProductFeatures ItemsSold MonthSold
25              34        April
18              12        May

ここで助けが必要な最も重要な部分は、複数のテーブルの複数の列からの製品に関するデータを、ビット単位の演算を使用して 1 つの整数列 productFeatures に結合する方法です。

4

2 に答える 2

3

SQL Server は|、ビット単位または以下をサポートしています。

select  productid
,       productname
,       case when isOnSale = 1 then 1 else 0 end |
        case when HasVeteranDiscount = 1 then 2 else 0 end |
        case when IsTaxExempt = 1 then 4 else 0 end as Flags
from    Table1

SQL Fiddle の例。

于 2013-04-28T00:16:38.233 に答える
1

これを試してください、サンプルはこちら

    select productid,intheMonthOf,features,sum(itemsold) as TotalSoldItems 
   from (

    select  a.productid,Datename(month,datesold) as intheMonthOf, itemsold,

    case when a.isonsale =1 then 1 else 0 end |
    case when a.hasveterrandiscount =1 then 2 else 0 end  |
    case when a.istaxexempt =1 then 4 else 0 end |
    case when b.isgeneric =1 then 8 else 0 end |
    case when b.canbesoldseparate =1 then 10 else 0 end as features

     from t1 a
    left outer join t2  b on a.productid=b.parentproductid
    inner join t3 c on c.porductid=a.productid )main
    group by productid,intheMonthOf,features
于 2013-04-28T01:16:00.957 に答える