我的数据集看起来大致如下:我的数据集看起来大致如下:
Docnum linenum DocDate CardName Quantity ItemCode ItemName DistNumber MnfSerial StockPrice BaseRef U_mwaiOrderType
11807 0 2016-05-31 Central Catholic 1.000000 ConfiguredItem ConfiguredItem NULL NULL 0.000000 7900 06
11807 1 2016-05-31 Central Catholic 1.000000 A5YN017 Bizhub 654e B&W Mfp with DF I0722 A5YN017008479 4937.400000 7900 06
11807 2 2016-05-31 Central Catholic 1.000000 A3EPWYE FS-534SD Staple Finisher w/ Saddle Stitch NULL A3EPWYA000404 1081.090000 7900 06
11807 3 2016-05-31 Central Catholic 1.000000 A87JWY1 RU-513 Relay Unit (FS-534 bundle component) A87JWY1087196 56.900000 7900 06
11807 4 2016-05-31 Central Catholic 1.000000 A3ETW11 Pk-520 2/3 Hole Punch Kit A3ETW11133335 200.000000 7900 06
11807 5 2016-05-31 Central Catholic 1.000000 A0W4WY3 WT-506 Working Table NULL NULL 49.730000 7900 06
11807 6 2016-05-31 Central Catholic 1.000000 7640017928 Uk-204 2gb Mem Upgrade NULL NULL 63.540000 7900 06
11807 7 2016-05-31 Central Catholic 1.000000 A0PD11H Lk-101 V.3 I-Option Lic (electronic version) NULL NULL 31.380000 7900 06
11807 8 2016-05-31 Central Catholic 1.000000 D5143NTKM Network 120/20 Qc Digital NULL NULL 109.320000 7900 06
11807 10 2016-05-31 Central Catholic 1.000000 ConfiguredItem ConfiguredItem NULL NULL 0.000000 7900 06
11807 11 2016-05-31 Central Catholic 1.000000 A5YN017 Bizhub 654e B&W Mfp with DF I0725 A5YN017008483 4937.400000 7900 06
11807 12 2016-05-31 Central Catholic 1.000000 A3EPWYE FS-534SD Staple Finisher w/ Saddle Stitch A3EPWYE002891 1069.710000 7900 06
11807 13 2016-05-31 Central Catholic 1.000000 A87JWY1 RU-513 Relay Unit (FS-534 bundle component) A87JWY1087022 68.280000 7900 06
11807 14 2016-05-31 Central Catholic 1.000000 A3ETW11 Pk-520 2/3 Hole Punch Kit A3ETW11147373 200.000000 7900 06
11807 15 2016-05-31 Central Catholic 1.000000 A0W4WY3 WT-506 Working Table NULL NULL 49.730000 7900 06
11807 16 2016-05-31 Central Catholic 1.000000 7640017928 Uk-204 2gb Mem Upgrade NULL NULL 63.540000 7900 06
11807 17 2016-05-31 Central Catholic 1.000000 A0PD11H Lk-101 V.3 I-Option Lic (electronic version) NULL NULL 31.380000 7900 06
11807 18 2016-05-31 Central Catholic 1.000000 D5143NTKM Network 120/20 Qc Digital NULL NULL 109.320000 7900 06
11807 20 2016-05-31 Central Catholic 1.000000 ConfiguredItem ConfiguredItem NULL NULL 0.000000 7900 06
11807 21 2016-05-31 Central Catholic 1.000000 A61F011 Bizhub 364e B&W Mfp I0726 A61F011024142 1706.220000 7900 06
11807 22 2016-05-31 Central Catholic 1.000000 A3CEWY1 Df-701 Single Pass Df A3CEWY1335693 718.410000 7900 06
11807 23 2016-05-31 Central Catholic 1.000000 A2XM019 Pc-410 Lrg Cap Cassette A2XM019028485 531.790000 7900 06
11807 24 2016-05-31 Central Catholic 1.000000 A4MF012 Fk-511 Fax Kit A4MF012169575 390.660000 7900 06
11807 25 2016-05-31 Central Catholic 1.000000 A3EPWY3 FS-534 Staple Finisher 227/Pro C754e NULL A3EPWY2040480 511.020000 7900 06
11807 26 2016-05-31 Central Catholic 1.000000 A87JWY1 RU-513 Relay Unit (FS-534 bundle component) A87JWY1087018 63.160000 7900 06
11807 27 2016-05-31 Central Catholic 1.000000 A0W4WY3 WT-506 Working Table NULL NULL 49.730000 7900 06
11807 28 2016-05-31 Central Catholic 1.000000 A0PD11H Lk-101 V.3 I-Option Lic (electronic version) NULL NULL 31.380000 7900 06
11807 29 2016-05-31 Central Catholic 1.000000 7640017928 Uk-204 2gb Mem Upgrade NULL NULL 63.540000 7900 06
11807 30 2016-05-31 Central Catholic 1.000000 D5133NTKM Digital 120/15 Network Qc NULL NULL 99.110000 7900 06
11807 32 2016-05-31 Central Catholic 1.000000 ConfiguredItem ConfiguredItem NULL NULL 0.000000 7900 06
11807 33 2016-05-31 Central Catholic 1.000000 A6F7011 Bizhub 4750 B&W Mfp I0727 A6F7011006859 1199.000000 7900 06
11807 34 2016-05-31 Central Catholic 1.000000 A6EDW11 Fk-512 Fax Kit A6EDW11029370 132.000000 7900 06
11807 35 2016-05-31 Central Catholic 1.000000 A6VGWY1 Mk-P03 Fax Mount Kit NULL NULL 37.760000 7900 06
11807 36 2016-05-31 Central Catholic 1.000000 MFP1 120/15 Network Surge NULL NULL 51.910000 7900 06
(有更多的数据 - 只是一个示例)
基本上,我希望能够将项目代码列中两个" configuretItem"之间所有内容的成本进行亚关系。(例如,我想要第0-8、10-18号线等股票的小计)
)我找不到任何要分组的东西,所以我想知道SQL中是否有某种方法可以添加一列,该列将为Liennums 0-8,2 for 10-18等。
我熟悉ROW_NUMBER()
功能,但是在这种情况下,我想不出一种方法适合我的计划。
我知道我需要做一个UNION
才能加入小计的表。我也很乐意使用UNION
进行ORDER BY
,以按照我想要的顺序获取它们。我只是错过了弄清楚如何分组的部分。
尝试一下,我认为它可能对您有用。
Drop Table #Test
Create Table #Test (Docnum Int, linenum Int, ItemCode Varchar(8000), StockPrice Decimal(15,6))
Insert #Test Values (11807, 0, 'ConfiguredItem', 0.000000)
Insert #Test Values (11807, 1, 'A5YN017', 4937.400000)
Insert #Test Values (11807, 2, 'A3EPWYE', 1081.090000)
Insert #Test Values (11807, 3, 'A87JWY1', 56.900000)
Insert #Test Values (11807, 4, 'A3ETW11', 200.000000)
Insert #Test Values (11807, 5, 'A0W4WY3', 49.730000)
Insert #Test Values (11807, 6, '7640017928', 63.540000)
Insert #Test Values (11807, 7, 'A0PD11H', 31.380000)
Insert #Test Values (11807, 8, 'D5143NTKM', 109.320000)
Insert #Test Values (11807, 10, 'ConfiguredItem', 0.000000)
Insert #Test Values (11807, 11, 'A5YN017', 4937.400000)
Insert #Test Values (11807, 12, 'A3EPWYE', 1069.710000)
Insert #Test Values (11807, 13, 'A87JWY1', 68.280000)
Insert #Test Values (11807, 14, 'A3ETW11', 200.000000)
Insert #Test Values (11807, 15, 'A0W4WY3', 49.730000)
Insert #Test Values (11807, 16, '7640017928', 63.540000)
Insert #Test Values (11807, 17, 'A0PD11H', 31.380000)
Insert #Test Values (11807, 18, 'D5143NTKM', 109.320000)
Insert #Test Values (11807, 20, 'ConfiguredItem', 0.000000)
;With cteGrouped As
(
Select *,
Sum(GroupMark) Over (Order By LineNum) GroupNum
From
(Select *,
Case When ItemCode = 'ConfiguredItem' Then 1 Else 0 End GroupMark
From #Test
) A
)
Select *,
Sum(StockPrice) Over (Partition By GroupNum Order By LineNum) RunningTotal
From cteGrouped
如果您可以访问公共表格(CTE),则它们可能非常强大。注意:这可能需要优化,具体取决于您必须使用/处理多少行。
DECLARE @tblData TABLE
(
DocNum varchar(100)
, linenum int
, ItemCode varchar(100)
, StockPrice decimal(18,6)
)
INSERT INTO @tblData
SELECT '11807',0, 'ConfiguredItem', 0
UNION SELECT '11807',1, 'A5YN017', 4937.400000
UNION SELECT '11807',2, 'A3EPWYE', 1081.090000
UNION SELECT '11807',10, 'ConfiguredItem', 0
UNION SELECT '11807',11, 'A5YN017', 4937.400000
UNION SELECT '11807',12, 'A3EPWYE', 1069.710000
UNION SELECT '11807',20, 'ConfiguredItem', 0
UNION SELECT '11807',21, 'A61F011', 1706.220000
UNION SELECT '11807',22, 'A3CEWY1', 718.410000
;WITH CTE_ROWNUM(linenum, rownum)
AS
(
SELECT
linenum
, ROW_NUMBER() OVER (PARTITION BY ItemCode ORDER BY linenum)
FROM @tblData
WHERE ItemCode = 'ConfiguredItem'
GROUP BY ItemCode, linenum
)
, CTE_GROUP_BY(linenum, linenumStart, linenumEnd)
AS
(
SELECT D.linenum,
D.linenum,
(CASE WHEN (SELECT linenum FROM CTE_ROWNUM R WHERE R.rownum = C.rownum + 1) IS NULL
THEN (SELECT MAX(linenum) FROM @tblData) --get the last set
ELSE
(SELECT linenum FROM CTE_ROWNUM R WHERE R.rownum = C.rownum + 1)
END)
FROM CTE_ROWNUM C
INNER JOIN @tblData D
ON C.linenum = D.linenum
)
SELECT GB.linenumStart, SUM(StockPrice) As Total
FROM @tblData D
INNER JOIN CTE_GROUP_BY GB
ON D.linenum BETWEEN GB.linenumStart AND GB.linenumEnd
GROUP BY GB.linenumStart