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 ║
╚═════════╩══════════╩════════════════╝
但我不知道如何收這兩個行和忽略所有的空值,或者如果有一個更有效的方式做到這在大桌子上。
謝謝,我會考慮這樣做。 – user38858