一个复杂的存储过程
Table A [成品表]
(
ID,
StyleID
)
Table B [物料表]
(
ID,
AID,
MaterialID,
Weight,
)
Table C [物料市场价格表]
(
ID
MaterialID,
Cost
)
现有存储过程的查询条件:
@TotalWeightFrom
@TotalWeightTo
以上两个条件是来判断 先总计A下面的B中Weight的Total是否在以上的范围
@IsHaveCost 如果这个是为True 那么A下面的物料,只要有一个物料没有市场价就显示,否则就不显示
@IsSameStyle 如果为True就按以上3个条件查的结果集,再在A表中找出相同Style的成品和已经查出来的结果集合并
请问以上存储过程如何写?
------最佳解决方案--------------------需要动态执行sql。
------其他解决方案--------------------最好能给出测试数据
------其他解决方案--------------------Table StoneMaterials [石头物料表]
(
StoneMaterialID,
MaterialCode,
StoneColorID
)
数据:
ID,MaterialCode,StoneColorID
1,1,1
2,2,2
Table StoneColor [石头颜色表]
(
StoneColorID,
ColorCode
)
StoneColorID,ColorCode
1,白色
2,黄色
3,黑色
Table StoneCert [石头证书表]
(
StoneCertID,
StoneMaterialID,
StoneColorID
CertName,
IsMainCert,
)
StoneCertID,StoneMaterialID,StoneColorID,CertName,IsMainCert,
1,1,1,GIA证书,True
2,1,1,IGI证书,False
3,2,2,GEMS证书,True
Table FinishGood [成品表]
(
FGID,
StyleID,
FGName
)
FGID,StyleID,FGName
10001,1,1克拉钻石戒指
10002,1,30分钻石戒指
Table FGStoneMaterials [成品的物料表]
(
ID,
FGID,
StoneMaterialID,
IsMainStone,
Weight
)
ID,FGID,StoneMaterialID,IsMainStone,Weight
1,10001,1,True,1
2,10001,2,False,0.1
3,10002,1,False,0.1
4,10002,2,True,0.8
一个FG(FinishGood)包含多个StoneMaterial(在FGStoneMaterials 表有关联),一个StoneMaterial包含多个证书,其中有一个证书时主证书(IsMainCert),一个FG有可能有多个MainStone,每个证书也有一个StoneColor属性,每个StoneMaterial也有一个StoneColor属性
现在需要查询:
WeightFrom,WeightTo FG的石头物料重量在这个范围内的
TotalWeightFrom,TotalWeightTo FG的石头物料的的Weight总计是否在这个范围内
MainCertColorID FG的石头物料的证书,并且是主证书的Color是否等于这个Color
MainStoneColorID FG的石头物料的MainStone的Color是否等于这个Color
需要返回的结果集字段:
FGName,FGID,MainStoneColorCode,MainCertColorCode,
场景1:按以上数据 输入查询条件如下:
WeightFrom 0.5
WeightTo 1
TotalWeightFrom 1
TotalWeightTo 1.1
MainCertColorID 1
MainStoneColorID 1
结果如下:
1克拉钻石戒指,10001,白色,白色
场景2:按以上数据 输入查询条件如下:
WeightFrom NULL
WeightTo NULL
TotalWeightFrom NULL
TotalWeightTo NULL
MainCertColorID NULL
MainStoneColorID 1
结果如下:
1克拉钻石戒指,10001,白色,白色
场景3:按以上数据 输入查询条件如下:
WeightFrom NULL
WeightTo NULL
TotalWeightFrom NULL
TotalWeightTo NULL
MainCertColorID 2
MainStoneColorID 1
结果如下:
30分钻石戒指,10002,黄色,白色
重新整理了下数据 麻烦大家帮忙写个存储过程。可以使用临时表,不要试用动态SQL
------其他解决方案--------------------沉了?帮忙解决下。。小弟SQL实在是太烂了