使用分组依据选择查询

问题描述 投票:-4回答:4

我需要用(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 ║
╚════════╩═══════╩════════╩═══════╝
sql sql-server database
4个回答
3
投票

如果你想要一个额外的行总额,你可以使用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


0
投票

您可以尝试此查询

select desc , desc2 ,sum(amt) as T_amt from table1 group by desc ,dec2

0
投票

试试这个:

SELECT ROW_NUMBER() OVER(ORDER BY Desc)ID,* 
FROM(
    SELECT Desc, Desc2,SUM(Amt)Amt 
    FROM Your_Table
    GROUP BY Desc, Desc2
    )D

0
投票

请尝试以下SQL语句:

SELECT ID, Desc, Desc2, SUM(Amt) as amount
FROM table1
GROUP BY Desc2

注意:如果“Desc”是您的真实字段名称,请将其更改为其他名称,因为SQL解析器会将其与ORDER BY子句中的“DESC”混淆。

© www.soinside.com 2019 - 2024. All rights reserved.