日期:2014-05-19  浏览次数:20475 次

高手快来看看,巨难问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
有三张数据表供应商表、采购定单表和一个分配比例表。
第一张表通过SQL查询语句获得价格最低的三个供应商。结果见下表
表一
产品ID     供应商ID                   价格
1319 205 10.0000000000
1319 207 120.0000000000
1319 206 1245.0000000000
1322 205 2.0000000000
1333 205 1.0000000000
1334 205 .5000000000
1346 205 5.0000000000
1356 205 5.0000000000


采购定单表通过SQL查询语句获得每种产品的需求合计数量。结果见下表
表二
单号         产品ID     采购的总数量
4 1319 4000.0000000000
4 1322 3500.0000000000
4 1333 3600.0000000000
4 1334 3850.0000000000
4 1346 3600.0000000000
4 1356 3860.0000000000
4 1358 3200.0000000000
4 1359 2900.0000000000

最后一张表
表三
序号         比例
1 70
2 20
3 10

现在要做的工作就是:
按产品编号来算。有可能为同一种产品有只有一个供应商,也有能为2或者3,如果为3个供应商,则按照价格由低到高,在表三中增加一列把百分比由高到低加到表一里面对应的行产品后面。然后还要把表二里面的产品采购总数增加到表一里面。

请问:这个如何在SQL查询器通过SQL语句来实现(不用存储过程)????


------解决方案--------------------
设表1为tVendor : ProductID,VendorID,Price
t2 : ProductID, Num
t3 : 序号,Per


由于CSDN的排版乱了,你的测试数据我看不清,就没试,随手敲了一下

SELECT ProductID,COUNT(*) cnt, INTO #base FROM tVendor GROUP BY ProductID
HAVING COUNT(*) <> 2

SELECT a.ProductID pid,a.Num num,v.Price price, '100% ' [percent] INTO #RST
FROM tb2 a inner join #base b ON a.Productid=b.Productid
inner join tVendor v on v.Productid=a.Productid WHERE cnt=1

INSERT #RST
SELECT b.ProductID,a.Num * c.per,v.Price,RTRIM(c.per) + '% "
FROM tb2 a
INNER JOIN #base b
ON a.Productid=b.Productid
INNER JOIN tVendor v
ON v.Productid=a.Productid
INNER JOIN tb3 c
ON c.序号=
(
SELECT COUNT(*) FROM tVendor WHERE Productid=a.Productid AND Vendorid=v.VendorID
AND Price <=v.Price
)
------解决方案--------------------
顶一下
------解决方案--------------------
然后还要把表二里面的产品采购总数增加到表一里面。

-----------------
只要 select语句也能实现?那才叫奇了...