0

我正在尝试将以下结构合并为一行:

ID     SubID    Total1  Total2  Total3
-----  -------  ------  ------  ------
Apple  Fruit    12      null    12
Apple  Veggies  null    24      24

这是我想要的结果:

ID     FruitTotal  VeggieTotal  TotalTotal
-----  ----------  -----------  ----------  
Apple  12          24           36
4

5 回答 5

4
DECLARE @Id AS VARCHAR(50)
SET @Id = 'Apple'

IF @Id IS NULL
BEGIN
    SELECT ID,
           SUM(ISNULL(Total1,0)) AS Total1,
           SUM(ISNULL(Total2,0)) AS Total2,
           SUM(ISNULL(Total3,0)) AS Total3
    FROM   Table
    GROUP BY ID
END
ELSE
    SELECT ID,
           SUM(ISNULL(Total1,0)) AS Total1,
           SUM(ISNULL(Total2,0)) AS Total2,
           SUM(ISNULL(Total3,0)) AS Total3
    FROM   Table
    WHERE  ID = @Id
    GROUP BY ID
BEGIN
END

编辑

你可能需要这个

DECLARE @Id AS VARCHAR(50)
SET @Id = 'Apple'

IF @Id IS NULL
BEGIN
    SELECT ID,
           (SELECT SUM(Total1) FROM Table WHERE ID = T.ID AND SubId = 'Fruit') AS FruitTotal,
           (SELECT SUM(Total2) FROM Table WHERE ID = T.ID AND SubId = 'Veggies') AS VeggiesTotal
           SUM(ISNULL(Total3,0)) AS Total3
    FROM   Table T
    GROUP BY ID
END
ELSE
    SELECT ID,
           (SELECT SUM(Total1) FROM Table WHERE ID = T.ID AND SubId = 'Fruit') AS FruitTotal,
           (SELECT SUM(Total2) FROM Table WHERE ID = T.ID AND SubId = 'Veggies') AS VeggiesTotal
           SUM(ISNULL(Total3,0)) AS Total3
    FROM   Table T
    WHERE  ID = @Id
    GROUP BY ID
BEGIN
END
于 2013-08-02T14:05:51.253 回答
1

除非我遗漏了什么,否则您只需要三个SUM

SELECT ID, SUM(Total1), SUM(Total2), SUM(Total3)
FROM myTable
GROUP BY ID

SQL 小提琴示例

于 2013-08-02T14:06:05.853 回答
0
SELECT   ID,
         SUM(Total1),
         SUM(Total2),
         SUM(Total3)
FROM     FruitTable
GROUP BY ID;

看看SQL 中的聚合函数SUM 函数

于 2013-08-02T14:07:03.930 回答
0
select id, 
    sum(coalesce(total1,0)) as Total1, 
  sum(coalesce(total2,0)) as Total2, 
  sum(coalesce(total3,0))  as Total3
from t
group by id
于 2013-08-02T14:10:37.317 回答
0

它与您已经看到的类似 - 但没有用于在单行中跨列求和的聚合。因此,您只需要手动进行数学运算:

select
    ID,
    SUM(COALESCE(Total1,0)) as FruitTotal,
    SUM(COALESCE(Total2,0)) as VeggieTotal,
    SUM(COALESCE(Total1,0) + COALESCE(Total2,0)) as TotalTotal
from
    [Table]
group by ID
于 2013-08-02T14:13:57.063 回答