Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有任何存储过程或函数的情况下删除SQL中的中间值?_Sql_Sql Server - Fatal编程技术网

如何在没有任何存储过程或函数的情况下删除SQL中的中间值?

如何在没有任何存储过程或函数的情况下删除SQL中的中间值?,sql,sql-server,Sql,Sql Server,我正在使用一些报告生成脚本,在这种情况下,我不知道如何执行此操作,因为我对SQL非常陌生 原始数据 预期产出 任何建议都将是非常可观的,提前谢谢 您可以使用条件聚合。问题在于获得适当的顺序,行号()可以帮助您: select fieldname, max(case when seqnum = 1 then oldvalue end) as oldvalue, max(case when seqnum = cnt then newvalue end) as newv

我正在使用一些报告生成脚本,在这种情况下,我不知道如何执行此操作,因为我对SQL非常陌生

原始数据

预期产出


任何建议都将是非常可观的,提前谢谢

您可以使用条件聚合。问题在于获得适当的顺序,
行号()
可以帮助您:

select fieldname,
       max(case when seqnum = 1 then oldvalue end) as oldvalue,
       max(case when seqnum = cnt then newvalue end) as newvalue
from (select t.*,
             row_number() over (order by id) as seqnum,
             count(*) over () as cnt
      from t
     ) t
group by fieldname;

您可以使用条件聚合。问题在于获得适当的顺序,
行号()
可以帮助您:

select fieldname,
       max(case when seqnum = 1 then oldvalue end) as oldvalue,
       max(case when seqnum = cnt then newvalue end) as newvalue
from (select t.*,
             row_number() over (order by id) as seqnum,
             count(*) over () as cnt
      from t
     ) t
group by fieldname;

假设您的id为递增整数(即标识)

返回

Sequence    FieldName   OldValue    NewValue
1           MI          M           N
2           GENDER      Male        Male
4           FIRSTNAME               John
7           STATE                   NJ
8           COUNTRY     US          USA

假设您的id为递增整数(即标识),则so添加了序列和顺序

返回

Sequence    FieldName   OldValue    NewValue
1           MI          M           N
2           GENDER      Male        Male
4           FIRSTNAME               John
7           STATE                   NJ
8           COUNTRY     US          USA

按so添加了序列和顺序,这将使用相当基本的SQL生成正确的结果:

SELECT
    mc1.FieldName,
    mc2.OldValue, -- OldestValue would perhaps be more meaningful
    mc3.NewValue -- Likewise, NewestValue here.
FROM (
    SELECT FieldName, MIN(Id) MinId, MAX(Id) MaxId
    FROM ModelChange
    GROUP BY FieldName
) mc1
INNER JOIN ModelChange mc2 ON mc1.MinId = mc2.Id
INNER JOIN ModelChange mc3 ON mc1.MaxId = mc3.Id;

我假设您的Id是递增的,给定字段名的最旧值将具有最小Id,最新值将具有最大Id。

这将使用相当基本的SQL生成正确的结果:

SELECT
    mc1.FieldName,
    mc2.OldValue, -- OldestValue would perhaps be more meaningful
    mc3.NewValue -- Likewise, NewestValue here.
FROM (
    SELECT FieldName, MIN(Id) MinId, MAX(Id) MaxId
    FROM ModelChange
    GROUP BY FieldName
) mc1
INNER JOIN ModelChange mc2 ON mc1.MinId = mc2.Id
INNER JOIN ModelChange mc3 ON mc1.MaxId = mc3.Id;

我假设您的Id是递增的,给定字段名的最旧值将具有最小Id,最新值将具有最大Id。

从原始数据获得预期输出的条件是什么!你能再写一些吗?从原始数据中获得预期输出的条件是什么!你能再写一些吗。。。