0
ここに、私のテーブルの出力があります。 EmpIDとSegmentTypeの順序は、グループごとに3つ以上のSegmentTypeが存在し、グループあたり15個以下のレコードが存在しない限り重要ではありません。グループあたり3つのグループとグループあたり15行以上のグループ
EmpID | WorkSegment | Group(What I'm trying to update) |
------| ----------- | --------------------------------- |
123 | yard | 1 |
245 | yard | 1 |
478 | yard | 1 |
584 | remote | 1 |
321 | remote | 1 |
879 | remote | 1 |
747 | office | 1 |
412 | office | 1 |
251 | office | 1 |
755 | support | 1 |
963 | support | 1 |
369 | support | 1 |
977 | intern | 1 |
888 | intern | 1 |
552 | intern | 1 |
225 | sales | 2 |
332 | sales | 2 |
357 | sales | 2 |
753 | yard | 2 |
これまでのコードは次のとおりです。これはグループあたり3つのWorkSegmentsの最初の目標を達成しましたが、今ではグループあたりわずか15行の制限を追加する必要があります。何か案は?
--Create table of distinct SegmentType
Select distinct SegmentType
into Work_DistinctSegmentTypes
from Work_AllData
Alter table Work_DistinctSegmentTypes
Add RowID INT IDENTITY(1, 1) NOT NULL
--Procedure to update group column
DECLARE @CurrentRowID INT,
@MaxRowID INT,
@SegmentType varchar(50)
SET @CurrentRowID = 1
SET @MaxRowID = (Select max(rowID) from Work_DistinctSegmentTypes)
WHILE @CurrentRowID <= @MaxRowID
BEGIN
Set @SegmentType = (Select SegmentType from Work_DistinctSegmentTypes Where RowID = @CurrentRowID)
Update Work_AllData
SET [Group] =(RowNum - (1))/3 + 1
FROM (SELECT EmpID,ROW_NUMBER() OVER (ORDER BY EmpID) AS RowNum
FROM Work_AllData
Where SegmentType = @SegmentType) st, Work_AllData
Where st.EmpID = Work_AllData.EmpID
SET @CurrentRowID = @CurrentRowID + 1
END
予想される出力を表示できますか? –
こんにちは、ようこそ。あなたが本当に助けることができるように、より多くの情報が必要です。これは始めるのに最適な場所です。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
Partition By文を追加する必要があるかのように見えます。行番号を入力すると、 'RowNumber <= 15'のどこに記述できるのでしょうか。 –