当前位置: 代码迷 >> Sql Server >> 一个复杂的存储过程,该怎么解决
  详细解决方案

一个复杂的存储过程,该怎么解决

热度:96   发布时间:2016-04-25 00:44:55.0
一个复杂的存储过程
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实在是太烂了
  相关解决方案