如何基于其他列的值将单个列值拆分为多个列?

5

我将尝试根据另一列的值将单列值拆分为多列,我可以做到,但我无法删除额外的空值

表格

create table tbl1
(id int, strtype varchar(50), strvalue varchar(20));

insert into tbl1 values
(1, 'name', 'a'),(1, 'value', 'a1'),(1, 'name', 'b'),(1, 'value', 'b1');

期望的输出结果

NAME    VALUE
a       a1
b       b1

我尝试过的 SQL 查询

select 
(case when strtype='name' then strvalue end) as name,
(case when strtype='value' then strvalue end) as value
from tbl1

你能提供更多关于你想做什么的信息吗?你的解释有点令人困惑。 - Arunprasanth K V
a和a1(以及b和b1)在数据中是如何相关的?值是否总是以名称+一些附加字符开头?或者名称和值之间的ID应该相同吗?还是您试图根据它们插入的顺序来完成它?基于这些,我们可以为您找到解决方案。 - Mark Madej
@ArunPrasanth:请仔细阅读问题。 - Ullas
我需要在一列中获取strtype中包含“name”的strvalue,在另一列中获取strtype中包含“value”的strvalue。希望这样能够澄清。 - abdulH
2个回答

3

请查看以下脚本,希望能对你有所帮助:

Select t1.strValue , t2.strvalue from tbl1 t1 inner join tbl1 t2 on t1.id = t2.id 
where t1.strtype = 'name' and t2.strtype = 'value' and t1.strvalue = LEFT(t2.strvalue ,1) 

1
如果我没记错的话,这应该对你有所帮助。
SELECT *
FROM   (SELECT *
        FROM   tbl1) a
       PIVOT (Max(strvalue)
             FOR strtype IN (name,value)) pv
UNION
SELECT *
FROM   (SELECT *
        FROM   tbl1) a
       PIVOT (Min(strvalue)
             FOR strtype IN (name,value)) pv 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接