27,582
社区成员




--预订表(编号,产品型号,预订日期,预订数量)
CREATE TABLE Forecast(ID varchar(25), PartNumber varchar(25), BOM varchar(25), BeginDate smalldatetime, QtyCurrent decimal(14,4));
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-7-1',0);
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-8-1',1000);
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-9-1',2000);
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-10-1',3500);
INSERT INTO Forecast VALUES('FO01','Part02','BOM02','2014-7-1',1200);
INSERT INTO Forecast VALUES('FO01','Part02','BOM02','2014-8-1',1800);
INSERT INTO Forecast VALUES('FO01','Part02','BOM02','2014-9-1',2500);
INSERT INTO Forecast VALUES('FO01','Part02','BOM02','2014-10-1',0);
GO
--预订区间数据表(编号,预订日期,显示标题)
CREATE TABLE ForecastOrderArea(ID varchar(25), BeginDate smalldatetime, Caption varchar(20));
INSERT INTO ForecastOrderArea VALUES('FO01','2014-7-1','JAL');
INSERT INTO ForecastOrderArea VALUES('FO01','2014-8-1','AUG');
INSERT INTO ForecastOrderArea VALUES('FO01','2014-9-1','SEP');
INSERT INTO ForecastOrderArea VALUES('FO01','2014-10-1','OCT');
INSERT INTO ForecastOrderArea VALUES('FO02','2014-7-1','JAL');
INSERT INTO ForecastOrderArea VALUES('FO02','2014-8-1','AUG');
INSERT INTO ForecastOrderArea VALUES('FO02','2014-9-1','SEP');
INSERT INTO ForecastOrderArea VALUES('FO02','2014-10-1','OCT');
GO
--预订BOM(编号,产品型号)
CREATE TABLE PartBOMMaster(ID varchar(25), PartNumber varchar(25));
INSERT INTO PartBOMMaster VALUES('BOM01','Part01');
INSERT INTO PartBOMMaster VALUES('BOM02','Part02');
GO
--预订BOM明细(编号,元件编码,数量)
CREATE TABLE PartBOMDetail(ID varchar(25), ComponentId varchar(25), Qty decimal(6,3));
INSERT INTO PartBOMDetail VALUES('BOM01','CAP01',3);
INSERT INTO PartBOMDetail VALUES('BOM01','CAP02',1);
INSERT INTO PartBOMDetail VALUES('BOM01','RES01',2);
INSERT INTO PartBOMDetail VALUES('BOM01','RES02',1);
INSERT INTO PartBOMDetail VALUES('BOM02','DIO01',3);
INSERT INTO PartBOMDetail VALUES('BOM02','CAP02',1);
INSERT INTO PartBOMDetail VALUES('BOM02','RES02',1);
INSERT INTO PartBOMDetail VALUES('BOM02','CAP01',1);
GO
DECLARE @sql varchar(5000);
DECLARE @area varchar(100);
SELECT @sql = '
WITH t AS
(
SELECT
a.[ID],
a.[PartNumber],
a.[BOM],
b.[Caption],
SUM(ISNULL(a.[QtyCurrent],0)) as QtyCurrent
FROM Forecast a
JOIN ForecastOrderArea b ON a.[ID] = b.[ID] AND a.[BeginDate] = b.[BeginDate]
GROUP BY
a.[ID],
a.[PartNumber],
a.[BOM],
b.[Caption]
)
SELECT
[ID],
[PartNumber],
[BOM],';
SELECT @area = '';
SELECT @area = @area + '['+ [Caption] + '],' FROM dbo.ForecastOrderArea;
SELECT @area = LEFT(@area,LEN(@area) - 1);
print @area;
SELECT @sql = @sql + @area + ' FROM t PIVOT(SUM([QtyCurrent]) FOR [Caption] IN(' + @area + ')) as pvt';
print @sql;
EXEC (@sql);
--master
select a.ID,a.PartNumber,a.BOM,b.Caption,sum(QtyCurrent) as QtyCurrent
into temp_fo_master
from Forecast a
inner join ForecastOrderArea b on a.ID = b.ID and a.BeginDate = b.BeginDate
group by a.ID,a.PartNumber,a.BOM,b.Caption
select ID,PartNumber,BOM,[JAL],[AUG],[SEP],[OCT]
from temp_fo_master
pivot
(
sum(QtyCurrent) for Caption in ([JAL],[AUG],[SEP],[OCT])
) as pvt
--detail
select a.BOM,b.ComponentId,a.Caption,a.QtyCurrent * b.Qty as Qty
into temp_fo_detail
from temp_fo_master a
inner join PartBOMDetail b on a.BOM = b.ID
--detail_dua
select BOM,ComponentId,[JAL],[AUG],[SEP],[OCT]
from temp_fo_detail
pivot
(
sum(Qty) for Caption in ([JAL],[AUG],[SEP],[OCT])
) as pvt
select b.ComponentId,a.Caption,a.QtyCurrent * b.Qty as Qty
into temp_fo_detail_dua
from temp_fo_master a
inner join PartBOMDetail b on a.BOM = b.ID
select row_number() over(order by ComponentId) as S_ID,ComponentId,[JAL],[AUG],[SEP],[OCT]
from temp_fo_detail_dua
pivot
(
sum(Qty) for Caption in ([JAL],[AUG],[SEP],[OCT])
) as pvt
CREATE TABLE Forecast(ID varchar(25), PartNumber varchar(25), BOM varchar(25), BeginDate smalldatetime, QtyCurrent decimal(14,4));
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-7-1',0);
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-8-1',1000);
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-9-1',2000);
INSERT INTO Forecast VALUES('FO01','Part01','BOM01','2014-10-1',3500);
INSERT INTO Forecast VALUES('FO02','Part02','BOM02','2014-7-1',1200);
INSERT INTO Forecast VALUES('FO02','Part02','BOM02','2014-8-1',1800);
INSERT INTO Forecast VALUES('FO02','Part02','BOM02','2014-9-1',2500);
INSERT INTO Forecast VALUES('FO02','Part02','BOM02','2014-10-1',0);
GO