2016-05-06 87 views
0

基本上,我有一個剪切優化器,它通過「擠出」和「剪切長度」輸出「剪切」列表。我的主要目標是將其縮減爲簡要的單張。下面是幾行演出,但我有一個場景最終會有1000多個剪輯。最終會有很多「擠壓」,每個都有相同的「剪切」。需要總結和計算SQL Server中的一組常用記錄

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

Piece_Id應該是什麼?是Stock_Id嗎? – Yatrix

+0

對不起,我不清楚。解釋輸出,你正在尋找。再次提出要獲得更好的迴應。 – KumarHarsh

+0

Stock_ID是我用來指代需要切割的特定擠出物。 stock_id有一個或多個剪切(cut_id),其中有一定的長度。由於可能存在大量與它們完全相同的切割,所以我試圖將相同的「stock_ids」組合爲具有相應數量的單個「piece_id」。 – markymark

回答

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; 
0

被稱爲正火。目的是爲了減少數據庫中的冗餘信息,這使得維護更加容易。一般來說,這是一件好事,所以你走在正確的軌道上。

在數據倉庫中,非規範化的相反方法是常用的,但在這種情況下不適用。

你可以閱讀更多關於它在這裏:維基百科>數據庫標準化:https://en.wikipedia.org/wiki/Database_normalization

如果你想了解它的深度,克里斯日期是領先的大師。他出版了許多書籍,包括由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; 

這給出了以下結果。

enter image description here

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;