C# 组合两个SQL查询的结果

C# 组合两个SQL查询的结果,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,我有两个表中的数据,我需要在一个查询中获取所有数据并连接获取数据 SELECT kpip.PersonalName, kpiT.Name, kpiPR.KpiTarget, kpiPR.KpiResultDate, kpiPR.KpiResult FROM KpiPersonalResult AS kpiPR join KpiPersonal as kpip on kpiPR.KpiPersonal = kpip.Id join KpiType AS

我有两个表中的数据,我需要在一个查询中获取所有数据并连接获取数据

SELECT 
kpip.PersonalName, 
kpiT.Name, 
kpiPR.KpiTarget, 
kpiPR.KpiResultDate, 
kpiPR.KpiResult
        FROM KpiPersonalResult AS kpiPR join KpiPersonal as kpip 
        on kpiPR.KpiPersonal = kpip.Id join KpiType AS kpiT 
        on kpip.KpiType = kpiT.Id join MerchantAdministrators as merA 
        on kpiPR.KpiAdded = merA.Id and kpiPR.KpiResultDate between '2021-04-07' and '2021-04-08' 
        
        select 
                kpiP.PersonalName, 
                kpiT.Name, 
                kpiP.KpiTarget 
                        from KpiPersonal as kpiP join KpiType as kpiT 
                        on kpiP.KpiType = kpiT.Id

基于第二个查询与第一个查询具有相同名称的3列的速度,我猜您的意思是合并它们:

SELECT 
  kpip.PersonalName, 
  kpiT.Name, 
  kpiPR.KpiTarget, 
  kpiPR.KpiResultDate, 
  kpiPR.KpiResult
FROM 
  KpiPersonalResult AS kpiPR 
  join KpiPersonal as kpip on kpiPR.KpiPersonal = kpip.Id 
  join KpiType AS kpiT on kpip.KpiType = kpiT.Id 
  join MerchantAdministrators as merA on kpiPR.KpiAdded = merA.Id and kpiPR.KpiResultDate between '2021-04-07' and '2021-04-08' 

UNION ALL

select 
  kpiP.PersonalName, 
  kpiT.Name, 
  kpiP.KpiTarget,
  null, --put suitable default values for the other columns here
  null 
from
  KpiPersonal as kpiP 
  join KpiType as kpiT on kpiP.KpiType = kpiT.Id
联合查询需要相同数量的列。我已经为第二个查询中相对于第一个查询缺失的两列插入了NULL作为默认值

结合使结果集变得更高。如果你想让它变得更广泛,那就通过加入来实现。这样做的一个简单模式是:

WITH query1 AS(
  --query 1 here
), query2 AS (
  --query2 here
)
SELECT * FROM query1 JOIN query2 ON ...

关于格式和缩进的旁注-大多数人认为,当所有相关的操作都处于相同的缩进级别时,SQL最具可读性。例如,在典型的查询中,SELECT FROM WHERE组顺序关键字都处于相同的缩进级别,与它们相关的块包括选定列的列表或联接表的列表,where'd谓词列表等再次缩进一级。我们通常也不使用as-when-aliasing表,但在SELECT

中对列进行别名时使用它。您需要显示一些示例数据、预期结果,并解释您希望如何准确组合数据。您是否考虑过union all?Bro如何不允许从我的组合列表中复制数据?请单独使用union而不是union all,或者重新配置查询,使其不选择重复数据。您应该意识到,UNION通过相当密集的操作执行重复数据消除—如果您可以在源位置停止重复数据,而不是在之后尝试将其删除,则可能会提高性能