Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将行值带到列_Sql_Sql Server - Fatal编程技术网

Sql 将行值带到列

Sql 将行值带到列,sql,sql-server,Sql,Sql Server,我把这张桌子放在下面 Branch Item No Month Qty_Sold A XX JAN 5 A XX FEB 13 A YY JAN 11 A YY FEB 37 B XX JAN 8 B XX

我把这张桌子放在下面

Branch     Item No    Month    Qty_Sold
  A          XX        JAN        5
  A          XX        FEB       13   
  A          YY        JAN       11
  A          YY        FEB       37
  B          XX        JAN        8
  B          XX        FEB       16
  B          XX        MAR        3
  B          YY        FEB       20
  B          YY        MAR       19
  B          ZZ        MAR       31
我想让它看起来像是

Branch     Item No     JAN      FEB      MAR
  A          XX          5       13        -
  A          YY         11       37        -
  B          XX          8       16        3
  B          YY          -       20       19
  B          ZZ          -        -       31
我该怎么做

有什么想法吗


谢谢

你可以看看这个答案:

还有这个:

从MSDN中汲取灵感:

你可能会想到:

-- Temporary table...
create table ##myTable (
        Branch      varchar(5)
        ,ItemNo     varchar(10)
        ,Mth        varchar(3)
        ,Qty_Sold   int
        )

-- ... with sample data
insert into ##myTable
        select  'A',          'XX',        'JAN',        5
union   select  'A',          'XX',        'FEB',       13   
union   select  'A',          'YY',        'JAN',       11
union   select  'A',          'YY',        'FEB',       37
union   select  'B',          'XX',        'JAN',        8
union   select  'B',          'XX',        'FEB',       16
union   select  'B',          'XX',        'MAR',        3
union   select  'B',          'YY',        'FEB',       20
union   select  'B',          'YY',        'MAR',       19
union   select  'B',          'ZZ',        'MAR',       31

-- So we have :
DECLARE @cols  AS NVARCHAR(MAX)
        ,@query AS NVARCHAR(MAX)

select @cols = STUFF((
                        SELECT  DISTINCT
                                ',' + QUOTENAME(Mth) 
                        FROM    ##myTable
                        FOR XML PATH(''), TYPE
                        ).value('.', 'NVARCHAR(MAX)') 
                    ,1,1,'')

set @query = '
    SELECT  Branch, ItemNo, ' + @cols + ' 
    FROM    (
              select Branch, ItemNo, Mth, Qty_Sold
              from ##myTable
            ) x
            pivot 
            (
                Sum(Qty_Sold)
                for Mth in (' + @cols + ')
            ) p'

execute sp_executesql @query

-- Remove temporary table
drop table ##myTable
试试这个

DECLARE @Mytable TABLE(Branch char(1),ItemNo char(2),Month char(3),Qty_Sold int)

insert into @Mytable

values 
('A','XX','JAN','5'),
('A','XX','FEB','13'),
('A','YY','JAN','11'),
('A','YY','FEB','37'),
('B','XX','JAN','8'),
('B','XX','FEB','16'),
('B','XX','MAR','3'),
('B','YY','FEB','20'),
('B','YY','MAR','19'),
('B','ZZ','MAR','31')

SELECT *FROM @MYTABLE
PIVOT(MAX(QTY_SOLD) FOR MONTH IN ([JAN],[FEB],[MAR]))T
ORDER BY Branch

到目前为止你试过什么吗?可能是有条件的支点或求和?如果突然出现APR项目,返回什么?我真的没有想到tbh。我们现在只有一月二月三月。但是是的,真的。。你说得对,我们会得到4月和5月等。可能那些列也在1-2月旁边,可能是