Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 server查询联合所有_Sql_Sql Server_Union_Union All - Fatal编程技术网

SQL server查询联合所有

SQL server查询联合所有,sql,sql-server,union,union-all,Sql,Sql Server,Union,Union All,我有一个UNION ALL查询,结果不正确。我应该能得到大约11万张唱片。请参阅查询 select Pop, planID, PopFull, ApptDate, intake1,FollowUP2,FollowupCode, rn, '5133' from (Select *, row_number() over (partition by planID order BY AddedDate asc) as rn from Vinfo) t where rn =

我有一个UNION ALL查询,结果不正确。我应该能得到大约11万张唱片。请参阅查询

select 
    Pop, planID, PopFull, ApptDate, intake1,FollowUP2,FollowupCode, rn, '5133'
from 
    (Select *, row_number() over (partition by planID order BY AddedDate asc) as rn from Vinfo) t
where 
    rn = 1 and ApptDate >='12/1/2014' and ApptDate <='12/31/2015'

Union All

select  
    Pop, planID, PopFull, ApptDate, intake1, FollowUP2, FollowupCode, rn, '5133' 
from 
    (Select *,row_number() over (partition by PlanID order BY AddedDate  DESC) as rn from Vinfo) t
where 
    rn = 1 and ApptDate >='12/1/2014' and ApptDate <='12/31/2015'
所以我要做的是选择所有的信息,在第一个SELECT语句中,我试图得到ADEDDATE是最低最早值时的摄入量值

我之所以使用UNION,是因为在第二个SELECT语句中,当ADDEDATE是最早的最新语句时,我试图获取FOLLOWup的值

摄入和随访的数值可能不同,但不一定非要如此。我正在努力追踪差异

然而,当我运行这个查询时,我得到了双倍的记录。是否有一种方法可以让我运行此查询,以便获得正确的记录数1100并获得摄入量值,如果后续值有变化,我将在同一行中看到

而不是看到一切的双重性。基本上,它现在运行的方式是,如果PLANID是1023,最早的日期是B,那么它也会显示B作为后续。此外,如果最新日期的后续数据为C,则它将在其下方的行中显示C表示摄入量和后续数据

编辑:


运行此操作但没有给出正确的结果

对于那些只有一个Pop、planID、PopFull、ApptDate、intake1、FollowUP2、FollowupCode组合实例的行,您显然会得到重复的结果-即ASC和DESC都返回一行,rn=1用于ASC和DESC排序

UNION ALL不允许从顶部和底部行集复制。 你可以试试工会

此外,如前所述,您可以在单选中同时计算两个行号:

select *
from
(
  select v.*,
    row_number() over (partition by PlanID order BY AddedDate asc) as rn_first,
    row_number() over (partition by PlanID order BY AddedDate  DESC) as rn_last
  from Vinfo v
) t
where t.rn_first = 1 or rn_last = 1

若你们抱怨记录的数量,那个么问题不在工会。Union all只返回2个以上的结果集。如果第一个查询返回n个记录,第二个查询返回m个记录,请查看n和m是否正确。UNION[w/o ALL]不会返回重复项如果我单独运行第一个查询,它会给我1100条记录,如果我运行第二个查询,我会得到1100条记录。但当我和工会一起管理他们时,它给了我2400英镑。当我在没有“全部”的情况下运行时,我会得到大约2150条记录,因为它将消除重复的记录,但其中许多记录是不同的。您是否关心实际的行数,或者您只是使用该函数来查找包含最早/最晚添加日期的接收/后续记录?我希望有1100条记录,其中包含接收值和后续值。但是如果没有相同的值,我希望在同一行中看到两个不同的值。比如说,最早日期的取数值是B,最新的后续值是C,我希望看到同一行中的值。B代表入学,C代表后续。偏执分析显示了每个计划ID的两个阶段。因此,由于最早日期的入学和最晚日期的后续值不同,我得到了每个计划ID的两行,这是我的错误。在这两种情况下都是planID没有RecPlanIDsee EDIT@ivan starostinSorry,这是一个打字错误-我更新了我的答案。
select *
from
(
  select v.*,
    row_number() over (partition by PlanID order BY AddedDate asc) as rn_first,
    row_number() over (partition by PlanID order BY AddedDate  DESC) as rn_last
  from Vinfo v
) t
where t.rn_first = 1 or rn_last = 1