2017-05-22 51 views
0

如何爲ReportID中的每個項目增加「項目數」增量?使用Microsoft SQL Server,根據表數據增加一列

正如你所看到的,reportId可以有幾個ShipNumbersShipNumber可以有幾個shipitems

ShipNumberShipItemShipLineTable的外鍵。物品數量和ReportId是此表的主鍵ReportLineTable

我需要知道如何在此表中插入ReportLineTable項目計數列,併爲每個報表ID下的項目添加它。例如,報告ID 1包含來自兩個發貨號(1111,2222)的3個項目,我需要爲項目計數列增加報告ID中的每個項目。我正在使用Microsoft SQL Server。

FYI ShipItem保留ShipNumber中物料的計數,並且此表已經創建。 ReportLineTable從這個表中獲取信息,我需要增加項目數量。

| Item count | Report ID | ShipNumber | ShipItem 
    1   1   1111   1 
    2   1   1111   2 
    3   1   2222   1 
    1   2   3333   1 
    2   2   3333   2 
    3   2   3333   3 
    4   2   4444   1 
    5   2   4444   2   
    1   3   5555   1 
    2   3   6666   2 
    1   4   7777   1 
    2   4   8888   1 
    3   4   8888   2 
    4   4   9999   1 
    5   4   9999   2 

編輯:試過,但我得到的主鍵衝突

Dim NextItemCount as integer 
dim lastitemcount as integer 

Dim MaxItemCount As String = "SELECT MAX(ItemCount) FROM ReportLineTable WHERE ReportID= @ReportID" 
     Dim MaxItemCountCommand As New SqlCommand(MaxItemCount, con) 
     MaxItemCountCommand .Parameters.Add("@ReportID", SqlDbType.Int).Value = NextItemCount 
     If con.State = ConnectionState.Closed Then con.Open() 
     Try 
      LastItemCount = CInt(MaxItemCountCommand.ExecuteScalar) 
     Catch ex As System.Exception 
      LastItemCount = 0 
     End Try 
     con.Close() 
     NextItemCount = LastItemCount + 1 

我在插入

Insert in ReportLineTable (enter every column including ItemCount, values (@Itemcount)",con) 
    parameters.add(@ItemCount.SqlDbInt).value = NextItemCount 
+0

我必須遍歷一個報告編號和增量項目每shipitem計數每shipitem? – NC25

+0

這與您的[上一個問題](https://stackoverflow.com/q/44119203/1070452)有何不同。請注意,刪除某人花時間回答的問題是非常糟糕的。 – Plutonix

+0

我試過什麼人回答,我不能得到它的工作,所以我想試着再次問,但更詳細的,因爲我最後一個問題停止獲得注意力 – NC25

回答

0

這給了我,我需要的結果:

"INSERT INTO ReportLineTable 
(ItemCount) 
SELECT 
ROW_NUMBER() OVER(PARTITION BY @ReportID ORDER BY ShipNumber) AS ItemCount 
FROM ShipLineTable" 
2

使用NextItemCount這是你想要的嗎?

+0

它足夠接近我所需要的,我能夠使用它並找出其餘的,謝謝。 – NC25

0

我可以執行此SQL代碼沒有問題。我不知道這是否正是你想要的,但我希望這有助於。代碼使用SQL,但您可以創建存儲過程或觸發器來自動化該過程。

我已將此表與您發佈的列一起使用。

create table ReportLineTable 
(
    itemCount int, 
    reportCount int, 
    shipNumber int, 
    shipItem int 
    primary key (itemCount, reportCount) 
) 

begin 
    Declare @itemNumber int; 
    Declare @reportCount int = 100; 

    select 
     @itemNumber = MAX(itemCount) + 1 
    from 
     ReportLineTable 
    where 
     reportCount = @reportCount; 

    if @itemNumber is NULL 
     set @itemNumber = 1; 

    insert into ReportLineTable 
    values(@itemNumber, @reportCount, 10000, 1); 
end; 
-- 10000 and 1 we'll be values from the other table ! Here as example. 

好運

米克爾

相關問題