如何在SQL Server中透视列

时间:2017-12-11 01:08:56

标签: sql-server pivot

我是SQL Server的新手,我正在尝试将行转移到列

select SalesOrExpense, store_no, total 
from myTable

SalesOrExpense  Store_No    total ($)
-------------------------------------
Expense           22          100
Sales             22          400

看起来像这样

Store_No       Expense      Sales
---------------------------------
22                100         400

有人可以帮我指出正确的方向吗?

由于

3 个答案:

答案 0 :(得分:0)

CREATE TABLE #Table1
    ([SalesOrExpense] varchar(7), [Store_No] int, [total] int)
;

INSERT INTO #Table1
    ([SalesOrExpense], [Store_No], [total])
VALUES
    ('Expense', 22, 100),
    ('Sales', 22, 400)

select *
from 
(
  select *
  from #Table1
) src
pivot
(
  max(total)
  for SalesOrExpense in ([Expense], [Sales])
) piv;

答案 1 :(得分:0)

    CREATE TABLE #Table1
        ([SalesOrExpense] varchar(7), [Store_No] int, [total] int);

    INSERT INTO #Table1
        ([SalesOrExpense], [Store_No], [total])
    VALUES
        ('Expense', 22, 100),
        ('Sales', 22, 400);


        SELECT Store_No,
               SUM(CASE WHEN SalesOrExpense='Expense' THEN TOTAL END) AS Expense,
               SUM(CASE WHEN SalesOrExpense='Sales' THEN TOTAL END) AS Sales 
          FROM #table1 GROUP BY Store_No;

OUTPUT:-
-------------------------
Store_No | Expense |Sales
---------------------------
  22        100      400

答案 2 :(得分:0)

我们甚至可以通过执行动态sql查询来实现它。

<强>查询

declare @sql as varchar(max);

select @sql = stuff((
        select ', sum(case [SalesOrExpense] when ' + char(39) + 
                [SalesOrExpense] + char(39) + 
                ' then [total] else 0 end) as [' + [SalesOrExpense] + ']'
        from [your_table_name]
        for xml path('')
    )
    , 1, 2, ''
);

select @sql = 'select [Store_No], ' + @sql +
            ' from [your_table_name] group by [Store_No];';

exec(@sql);