2014-07-25 23 views
0

我的主要問題是我不確定我想要做什麼,所以我不知道如何研究它。如果有人能給我一些術語或方向或答案,我將不勝感激。向列移動字段值表

我知道我的最終目標是什麼,我只是不知道什麼是合適的術語。

我有一個返回的查詢:

select * 
from details 
where EventId in (1,2,3) 

╔═════════╦═════════╦═════╦═══════════════════════╦══════╗ 
║ EventId ║ Name ║ Col ║  StrValue  ║ Col6 ║ 
╠═════════╬═════════╬═════╬═══════════════════════╬══════╣ 
║  1 ║ Person ║ 0 ║ Alice.Anderson  ║ NULL ║ 
║  1 ║ Machine ║ 0 ║ SPOT-001    ║ NULL ║ 
║  1 ║ Address ║ 1 ║ 10.0.0.14    ║ NULL ║ 
║  1 ║ Pool ║ 0 ║ GT2     ║ NULL ║ 
║  2 ║ Person ║ 0 ║ Bob.Barker   ║ NULL ║ 
║  2 ║ Machine ║ 0 ║ SPOT-006    ║ NULL ║ 
║  2 ║ Address ║ 1 ║ 10.0.0.19    ║ NULL ║ 
║  2 ║ Pool ║ 0 ║ GT2     ║ NULL ║ 
║  3 ║ Person ║ 0 ║ Christine.Christensen ║ NULL ║ 
║  3 ║ Machine ║ 0 ║ SPOT-003    ║ NULL ║ 
║  3 ║ Address ║ 1 ║ 10.0.0.34    ║ NULL ║ 
║  3 ║ Pool ║ 0 ║ GO1     ║ NULL ║ 
╚═════════╩═════════╩═════╩═══════════════════════╩══════╝ 

我想一個查詢,返回這一點,其中列2,3名的基礎上,從上表中的字段:

╔═════════╦══════════╦═══════════════════════╗ 
║ EventId ║ Machine ║  Person   ║ 
╠═════════╬══════════╬═══════════════════════╣ 
║  1 ║ SPOT-001 ║ Alice.Anderson  ║ 
║  2 ║ SPOT-006 ║ Bob.Barker   ║ 
║  3 ║ SPOT-003 ║ Christine.Christensen ║ 
╚═════════╩══════════╩═══════════════════════╝ 

我已經能夠接近case when聲明的集合,但總是有這麼多的空值,它不會像我需要的那樣崩潰。

我已經試過這樣的事情,並得到如下:

select 
    case when Name in ('Person','Machine') then EventId end, 
    case Name when 'Machine' then StrValue end, 
    case Name when 'Person' then StrValue end 
from details 
where EventId = 1 

╔═════════╦══════════╦════════════════╗ 
║ EventId ║ Machine ║  Person  ║ 
╠═════════╬══════════╬════════════════╣ 
║ NULL ║ NULL  ║ NULL   ║ 
║ 1  ║ Spot-001 ║ NULL   ║ 
║ 1  ║ NULL  ║ Alice.Anderson ║ 
║ NULL ║ NULL  ║ NULL   ║ 
║ NULL ║ NULL  ║ NULL   ║ 
║ NULL ║ NULL  ║ NULL   ║ 
║ NULL ║ NULL  ║ NULL   ║ 
╚═════════╩══════════╩════════════════╝ 

但我不知道如何收這兩個行和忽略所有的空值,或者如果有一個更有效的方式做到這在大桌子上。

+0

謝謝,我會考慮這樣做。 – user38858

回答

2

我敢肯定,這將給你你期待的輸出:

select 
    EventId, 
    max(case Name when 'Machine' then StrValue end) as machine, 
    max(case Name when 'Person' then StrValue end) as person 
from details 
where EventId = 1 
    and name in ('Person','Machine') 
group by EventId