在SQL中透视负值

时间:2015-12-17 13:29:14

标签: sql sql-server tsql pivot

 CREATE TABLE [dbo].(test)
            [cid] [varchar](50) NULL,
            [mid] [varchar](50) NULL,
            [val] [varchar](50) NULL
  ) ON [PRIMARY]

表格结构(选择*表格测试)

cid     mid val
h0609   c01 -213
h0609   c02 -7
h0609   c03 0
h0702   c01 -4
h0702   c04 -3

我需要这种格式的输出

cid     c01   c02    c03    c04
h0609   -213    -7   0      NULL
h0702   -4    NULL   NULL   -3
h1171   NULL  NULL  -212     -117
h1272   -9    NULL   NULL   NULL
h1273   6     NULL   NULL   NULL

查询我尝试过(但是它给出了空值)

SELECT cid, mid,[c01],[c02],[c03],[c04]
FROM [dbo].[test] 
PIVOT( max(val) 
  FOR val IN ([c01],[c02],[c03],[c04]) ) AS P

我得到了像这样的输出

cid     mid c01     c02     c03     c04
h0609   c01 NULL    NULL    NULL    NULL
h0702   c01 NULL    NULL    NULL    NULL
h1272   c01 NULL    NULL    NULL    NULL
h1273   c01 NULL    NULL    NULL    NULL

我需要这种格式的输出

 cid    c01   c02    c03    c04
 h0609  -213    -7   0      NULL
 h0702  -4    NULL   NULL   -3
 h1171  NULL  NULL  -212     -117
 h1272  -9    NULL   NULL   NULL
 h1273  6     NULL   NULL   NULL

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这与负值无关。问题是pivot

SELECT cid, mid,[c01],[c02],[c03],[c04]
FROM [dbo].[test] 
PIVOT( max(val) 
  FOR val IN ([c01],[c02],[c03],[c04]) ) AS P
------^

那应该是mid; val并不接受这些价值观。