如何在没有任何存储过程或函数的情况下删除SQL中的中间值?
我正在使用一些报告生成脚本,在这种情况下,我不知道如何执行此操作,因为我对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
任何建议都将是非常可观的,提前谢谢 您可以使用条件聚合。问题在于获得适当的顺序,
行号()
可以帮助您:
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。从原始数据获得预期输出的条件是什么!你能再写一些吗?从原始数据中获得预期输出的条件是什么!你能再写一些吗。。。