我有数千行描述某些产品的表格。它有多个关于产品功能的专栏。例如,
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,
}
对于统计分析,我需要将三个表中的上述数据插入一个表中,作为所有适用产品功能的按位或整数,其中包含属于该类别的产品数量以及产品销售计数,例如:
ProductTrend
ProductFeatures ItemsSold MonthSold
例如,如果产品是非常规的并且具有一个或多个通用的部件并且具有可以单独出售的一个或多个部件,则其为25。 而另一种产品有相同数量,并且有一个或多个零件可以单独出售,然后是18 [HasVeteranDiscount | CanBeSoldSeperate = 18] 我的表应该如下:
ProductTrend
ProductFeatures ItemsSold MonthSold
25 34 April
18 12 May
我需要帮助的最重要的部分是如何将多个表中多列的产品数据组合成一个具有按位运算的整数列productFeatures。
答案 0 :(得分: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
答案 1 :(得分:1)
试试这个,sample here
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