我需要用(group by
)选项选择表值。 Table1
包含我需要汇总的周数据列表,并根据Desc 2
对值进行分组,
表格1:
╔════════╦═══════╦════════╦═══════╗
║ ID ║ Desc ║ Desc 2 ║ Amt ║
╠════════╬═══════╬════════╬═══════╣
║ 1 ║ Total ║ Spent ║ 25.00 ║
║ 2 ║ Total ║ Net ║ 55.00 ║
║ 3 ║ Total ║ Spent ║ 78.00 ║
║ 4 ║ Total ║ avg ║ 99.00 ║
║ 5 ║ Total ║ Net ║ 54.00 ║
║ 6 ║ Total ║ vv ║ 58.00 ║
║ 7 ║ Total ║ vv ║ 55.00 ║
║ 8 ║ Total ║ avg ║ 55.00 ║
╚════════╩═══════╩════════╩═══════╝
我需要Table1
中的选择查询,如下所示
结果表:
╔════════╦═══════╦════════╦═══════╗
║ ID ║ Desc ║ Desc 2 ║ Amt ║
╠════════╬═══════╬════════╬═══════╣
║ 1 ║ Total ║ Null ║479.00 ║
║ 2 ║ Total ║ Net ║109.00 ║
║ 3 ║ Total ║ Spent ║103.00 ║
║ 4 ║ Total ║ avg ║154.00 ║
║ 5 ║ Total ║ vv ║113.00 ║
╚════════╩═══════╩════════╩═══════╝
如果你想要一个额外的行总额,你可以使用GROUPING SETS
DECLARE @SampleData AS TABLE
(
ID int IDENTITY (1,1),
[Desc] varchar(10),
Desc2 varchar(10),
Amt int
)
INSERT INTO @SampleData
(
[Desc],
Desc2,
Amt
)
VALUES
('Total','Spent',25),
('Total','Net',55),
('Total','Spent',78),
('Total','avg',99),
('Total','Net',54),
('Total','vv',58),
('Total','vv',55),
('Total','avg',55)
SELECT row_number() over(ORDER BY [desc],[desc2]) AS Id,
[Desc], Desc2, sum(Amt) AS SumAmt
FROM @SampleData sd
GROUP BY GROUPING SETS (([Desc], Desc2), ([Desc]))
在这里查看我的演示http://rextester.com/OYTFG21446
您可以尝试此查询
select desc , desc2 ,sum(amt) as T_amt from table1 group by desc ,dec2
试试这个:
SELECT ROW_NUMBER() OVER(ORDER BY Desc)ID,*
FROM(
SELECT Desc, Desc2,SUM(Amt)Amt
FROM Your_Table
GROUP BY Desc, Desc2
)D
请尝试以下SQL语句:
SELECT ID, Desc, Desc2, SUM(Amt) as amount
FROM table1
GROUP BY Desc2
注意:如果“Desc”是您的真实字段名称,请将其更改为其他名称,因为SQL解析器会将其与ORDER BY子句中的“DESC”混淆。