如何根据另一列中的值将一列拆分为两列

How to split a column into two columns based on the value in the another column

我在 Ms SQL 服务器 table 中有以下数据。

我想得到如下输出。

我尝试了两组查询,但都没有帮助。

第一组查询给了我空值

查询

SELECT 
    [id]
  , [sav]
  , [cat]
  , [tech]
  , [asset]
  , CASE
        WHEN [objname] = 'FieldName'
        THEN [stringvalue]
    END AS [fieldname]
  , CASE
        WHEN [objname] = 'FieldValue'
        THEN [stringvalue]
    END AS [fieldvalue]
FROM [test].[dbo].[sample];  

输出

第二组查询给我 0 作为字段值,因为我已经对其进行了硬编码。

查询

SELECT 
    ROW_NUMBER() OVER(ORDER BY [fieldname]) AS 'id'
  , [sav]
  , [cat]
  , [tech]
  , [asset]
  , [fieldname]
  , 0 AS [fieldvalue]
FROM [test].[dbo].[sample] PIVOT(MAX([stringvalue]) FOR [objname] IN(
    [fieldname])) [p]
WHERE [fieldname] IS NOT NULL;

输出

如何实现?

你有一个非常神秘的数据结构。 SQL 表格本质上是无序的。据我所知,SQL 值位于基于 id 的 "next" 行中。

如果是这样,你可以使用lead():

select . . .,
       stringvalue as fieldname, next_string_value as stringvalue
from (select t.*, lead(t.stringvalue) over (order by id) as next_string_value
      from t
     ) t
where t.objname = 'objname';

如果你真的在使用SQL Server 2008,你可以使用自连接。这确实假设 ID 中没有间隙。