我的数据库中有一个表,我们的IT上传了计算机名称和它们所在的系统。我们目前正在做的是尝试协调哪个系统缺少哪台计算机,以及重复项所在的位置。
CREATE TABLE test(
[item] [varchar](max) NOT NULL,
[system] [varchar](max) NOT NULL
) ON [PRIMARY]
GO
INSERT INTO test
(item, system)
VALUES
('item 1','system 1'),
('item 1','system 1'),
('item 1','system 2'),
('item 1','system 3'),
('item 2','system 2'),
('item 2','system 3'),
('item 3','system 1'),
('item 3','system 2');
我提供了一个SQL小提琴HERE作为示例数据。我想要的输出是THIS。
不是100%从这里开始。
编辑:更新了问题:
@MilenPavlov回答了样本数据的完美工作,但在现实世界的情况下,我不知道项目的名称。只有系统是静态的。是否有他的查询的再现没有使用项目的名称?
编辑:找到解决方案,感谢大家的帮助!
SELECT MAX( CASE WHEN system = 'system 1' THEN item END) system1
,MAX( CASE WHEN system = 'system 2' THEN item END) system2
,MAX( CASE WHEN system = 'system 3' THEN item END) system3
FROM test
GROUP BY item
答案 0 :(得分:2)
与预期输出略有偏差,但仍然看一下(使用数据透视):
select [system 1], [system 2], [system 3]
from
(
SELECT distinct system, item FROM test
where item = 'item 1'
) x
pivot
(
max(item)
for system in ([system 1], [system 2], [system 3])
)p
union all
select [system 1], [system 2], [system 3]
from
(
SELECT distinct system, item FROM test
where item = 'item 2'
) x
pivot
(
max(item)
for system in ([system 1], [system 2], [system 3])
)p
union all
select [system 1], [system 2], [system 3]
from
(
SELECT distinct system, item FROM test
where item = 'item 3'
) x
pivot
(
max(item)
for system in ([system 1], [system 2], [system 3])
)p
答案 1 :(得分:0)
select
case when system='system 1' then item
END ,
case when system='system 2' then item
END ,
case when system='system 3' then item
END
FROM TEST;