仅旋转值并选择没有枢轴

时间:2017-11-24 13:43:16

标签: sql sql-server pivot

我有一张像这样的桌子

OutputID    |       Name        |   Value   |
---------------------------------------------
15417       |   Material code   |   ABC123  |
15417       |   Chemical Name   |   ABCdef  |
15417       |   BatchNo         |   BID213  |
15417       |   Container no    |   12      |
15417       |   Notrequired1    |   xxx     |
15417       |   Notrequired2    |   yyy     |

需要的结果

OutputID    |   BatchNo     |       Name        |   Value   |
--------------------------------------------------------------
15417       |   BID213      |   Material code   |   ABC123  |
15417       |   BID213      |   Chemical Name   |   ABCdef  |
15417       |   BID213      |   Container no    |   12      |

基本上必须选择OutputID,Name和Value,其中材料代码中的名称,化学名称,容器编号和仅旋转BatchNo。我遇到的问题是我可以使枢轴工作或选择名称和值。我无法做到这两点。非常感谢任何帮助。

到目前为止我的尝试。

仅显示轮回值

Select Outputid, [BatchNo]
from
(
    select outputid, name, value from ##temp_table_unpacked
    where name in ('Material Bar Code','Chemical Name','Container No')
)
AS S
PIVOT
(
    MAX([Value]) FOR [Name] IN([BatchNo])
) As P;

得到错误(不知道姓名和价值)

Select Outputid, [BatchNo], Name, Value
from
(
    select outputid, name, value from ##temp_table_unpacked
    where name in ('Material Bar Code','Chemical Name','Container No')
)
AS S
PIVOT
(
    MAX([Value]) FOR [Name] IN([BatchNo])
) As P;

我正在使用SQL Server 2014。

1 个答案:

答案 0 :(得分:1)

这似乎可以做你想要的:

select tt.outputid, tt.batchno, tt.name, tt.value
from (select tt.*,
             max(case when name = 'BatchNo' then value end) over (partition by outputid) as batchno
      from ##temp_table_unpacked tt
     ) tt
where name in ('Material Bar Code', 'Chemical Name', 'Container No');