【问题标题】:how to split single column values into multiple columns based on other column values如何根据其他列值将单列值拆分为多列
【发布时间】:2014-11-07 07:01:48
【问题描述】:

我正在尝试根据另一个列值将单个列值拆分为多个列,我可以得到它,但我无法删除我得到的其他空值

表格

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

【问题讨论】:

  • 你能提供更多关于你想做什么的信息吗?你的解释有点混乱
  • 数据中的 a 和 a1(以及 b 和 b1)如何相关?该值是否总是以名称+一些附加字符开头?或者名称和值之间的 ID 是否应该相同?或者您是否尝试根据插入的顺序来执行此操作?在此基础上,我们可以为您找到解决方案。
  • @ArunPrasanth:正确阅读问题
  • 我需要在一列的 strtype 中获取具有“名称”的 strvalue,在另一列的 strtype 中获取具有“值”的 strvalue。希望这可以澄清

标签: sql sql-server


【解决方案1】:

检查以下脚本,希望对您有所帮助:

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) 

【讨论】:

    【解决方案2】:

    如果没有错,这应该对您有所帮助。

    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 
    

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      相关资源
      最近更新 更多