在一个SQL列中合并多个列

时间:2015-12-16 17:50:31

标签: sql sql-server sql-server-2008 sql-server-2005

我很难解决这个问题,希望有人可以帮我解决一些提示或建议。

我在SQL中有一个包含3列的表:

Pencil Sales    Notebook Sales  Pen Sales
     1                2             3
     9                5             6
     7                8             9

我使用“Union all”和每列的总和进行了查询。

我的查询如下:

select sum(pencilsales) from table1 union all
select sum(notebooksales) from table1 union all
select sum(pensales) from table1

它给了我以下内容:

(No Column Name)
       17           
       15     
       18   

但我想知道是否有一种方法可以使用“desc”或类似的东西对这个新查询进行排序,并添加一个新列,说明哪一行是每行,如下所示:

      Sales        Name
       18       Pen Sales     
       17       Pencil Sales
       15       Notebook Sales

希望你能帮助我提出想法并提前感谢你们:)

4 个答案:

答案 0 :(得分:1)

select * from
(
select 'Pencil Sales' as Name, sum(pencilsales) as sales from table1 
union all
select 'Notebook Sales', sum(notebooksales) from table1 
union all
select 'Pen Sales', sum(pensales) from table1
) t order by sales desc

答案 1 :(得分:0)

这是UNPIVOT的一个非常好的候选人

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Ignore<Noticia>(t => t.IsValid);
        modelBuilder.Ignore<Noticia>(t => t.ValidationResult);
        base.OnModelCreating(modelBuilder);
    }

答案 2 :(得分:0)

您无法在MySql中取消隐藏。子查询得到你想要的。

答案 3 :(得分:0)

在这种情况下通常不使用UNION。 SQL Server可以方便地PIVOT/UNPIVOT执行此操作。

此外,如果您有像#&#34; Sales Associate&#34;这样的密钥,您的问题就会更容易理解。

CREATE TABLE Sales
(
   [Sales Assoicate Id] varchar(10),
   [Pencil Sales] int,
   [Notebook Sales] int,
   [Pen Sales] int
);

INSERT INTO Sales ([Sales Associate Id],[Pencil Sales],[Notebook Sales],[Pen Sales]) VALUES ('Morgan',1,2,3);
INSERT INTO Sales ([Sales Associate Id],[Pencil Sales],[Notebook Sales],[Pen Sales]) VALUES ('Jane',9,5,6);
INSERT INTO Sales ([Sales Associate Id],[Pencil Sales],[Notebook Sales],[Pen Sales]) VALUES ('Jeff',7,8,9);

看起来像:

Sales Associate Id   Pencil Sales    Notebook Sales  Pen Sales
   Morgan                 1                2             3
   Jane                   9                5             6
   Jeff                   7                8             9

要获得结果,请问他们如何使用UNPIVOT!

SELECT SUM(Sales) Sales,
       Name 
FROM Sales
UNPIVOT
    (Sales FOR Name IN ([Pencil Sales],[Notebook Sales],[Pen Sales])) SalesSummary
GROUP BY Name

结果:

Sales     Name
 15     Notebook Sales
 18     Pen Sales
 17     Pencil Sales