基本上,我有一个切割优化器,可以通过“挤出”和“切割长度”输出“切割”列表。我的主要目标是将其缩减为总结的切片。下面是几行显示,但有一个场景我最终会有1000多个削减。最终会有很多“挤出”,每个都有相同的“削减”。
Cut_ID | Ext_ID | CutLength
1 1 139
2 1 139
3 2 139
4 2 139
5 3 139
6 3 130
7 4 285
我正在尝试做的是识别并将所有类似的“挤出”分组为具有相应“数量”的“组”...像这样:
ExtGroup | Qty
1 2
2 1
3 1
之后,我会将所有内容放入相应的表中,以显示每个“组”需要的剪切长度
ExtGroup | CutLength
1 139
1 139
2 139
2 130
3 265
让我知道我是否应该从另一个角度处理这个问题.....我需要最终制作一个简单的报告/图形供人们打印车辙并放在剪贴板上以便在切割挤压时参考
感谢
编辑:更改了一些术语,并试图澄清一些有点模糊的东西。 Stock_ID现在称为Ext_ID ...,表示单个挤出
答案 0 :(得分:0)
这是SQL Server的痛苦。我认为最简单的方法就是使用聚合字符串连接来定义各个部分。
你可以在SQL Server中执行此操作:
select row_number() over (select NULL)) as pieceId,
count(*) as numstocks
from (select stockid,
stuff((select ',' + cast(cutlength as varchar(255))
from t t2
where t2.stockid = t.stockid
for xml path ('')
), 1, 1, '') as cuts
from t
group by stockid
) s
group by cuts;
答案 1 :(得分:0)
您要做的是称为规范化。目的是减少数据库中的冗余信息,使其更易于维护。一般来说,这是一件好事,所以你走在正确的轨道上。
在数据仓库中,常用的是反规范化的相反方法,但在这种情况下不适用。
你可以在这里阅读更多相关信息:维基百科>数据库规范化:https://en.wikipedia.org/wiki/Database_normalization
如果你想深入了解它,Chris Date是领先的大师。他出版了许多书籍,包括:数据库设计和关系理论,由O'Reilly Media出版。然而,他的书对于这种情况来说有点沉重和过度杀伤。
你可以像这样为大小和股票创建单独的表。
CREATE TABLE dbo.Size
(
SizeID int NOT NULL PRIMARY KEY,
CutLength int NOT NULL
);
CREATE TABLE dbo.Stock
(
StockID int NOT NULL PRIMARY KEY,
[Description] nvarchar(50) NOT NULL,
SizeID int NOT NULL FOREIGN KEY REFERENCES dbo.Size(SizeID),
Quantity int NOT NULL
);
然后在表格中插入一些值。
INSERT INTO dbo.Size (SizeID, CutLength)
VALUES
(1, 139),
(2, 139),
(3, 285);
INSERT INTO dbo.Stock (StockID, [Description], SizeID, Quantity)
VALUES
(101, N'Plastic', 1, 10),
(102, N'Metal', 1, 25),
(103, N'Plastic', 2, 15),
(104, N'Metal', 2, 75),
(105, N'Plastic', 3, 12);
当您想报告时,您可以像这样“加入”这两个表。
SELECT S.StockID, S.[Description], S.SizeID, Z.CutLength, S.Quantity
FROM dbo.Stock AS S
INNER JOIN dbo.Size AS Z
ON Z.SizeID = S.SizeID
ORDER BY StockID;
这给出了以下结果。
答案 2 :(得分:0)
谢谢....我睡了一觉然后又回到了绘图板。
决定为每次挤压重新格式化我的优化器的输出,以便将切割列为以分号分隔的字符串。它使重复组合和计数变得更加容易。当我检索数据时,我可以用分号分割切割。
group_id | qty | Cuts
1 27 138.18750;138.18750;
2 22 67.56250;67.56250;67.56250;67.56250;
3 15 89.31250;89.31250;89.31250;
4 15 88.93750;88.93750;88.93750;