如果复杂的SQL查询在另一个视图中不存在,则需要添加一行
我有一个相当复杂的观点。该查询从大约14个表中提取数据,其中还涉及一个子查询。结果如下: [唯一标识符][办公室][编号][说明][价值][客户][斯特霍比] 现在,此信息从名为ViewTeamMembers的视图中提取。ViewTeamMembers视图将根据唯一标识符返回所有团队成员。有时有团队成员,但没有所有者。我需要我的查询来从ViewTeamMembers中提取数据,目前正在这样做,并检查是否有所有者。如果没有所有者,我需要在结果集中插入一行,其中所有者名称不会被分配,所有其他数据都将由其他团队成员的数据填充。我怎样才能做到这一点 例如:如果复杂的SQL查询在另一个视图中不存在,则需要添加一行,sql,Sql,我有一个相当复杂的观点。该查询从大约14个表中提取数据,其中还涉及一个子查询。结果如下: [唯一标识符][办公室][编号][说明][价值][客户][斯特霍比] 现在,此信息从名为ViewTeamMembers的视图中提取。ViewTeamMembers视图将根据唯一标识符返回所有团队成员。有时有团队成员,但没有所有者。我需要我的查询来从ViewTeamMembers中提取数据,目前正在这样做,并检查是否有所有者。如果没有所有者,我需要在结果集中插入一行,其中所有者名称不会被分配,所有其他数据都将
ViewTeamMembers
[unique123][Office1][555-5555][description][1,000][Frank][hourly]
[unique123][Office1][555-5555][description][1,000][Tom][Salary]
[unique123][Office1][555-5555][description][1,000][Brent][Hourly]
我需要对此进行查询,看看是否有一行存在具有jobid所有者的人,如果没有,我需要将自己的行插入到具有
[unique123][Office1][555-5555][description][1,000][Not Assigned][Owner]
因此,当我查看查询结果集时,我应该
[unique123][Office1][555-5555][description][1,000][Frank][hourly]
[unique123][Office1][555-5555][description][1,000][Tom][Salary]
[unique123][Office1][555-5555][description][1,000][Brent][Hourly]
[unique123][Office1][555-5555][description][1,000][Not Assigned][Owner]
这是我的加入
左外连接
dbo.viewteammembers.guidrequirementid=dbo.tblrequirements.guidrequirementid上的dbo.viewteammembers
我会假设我必须这样做:
select * from viewteammembers case when not exists(select * from viewteammebers where strjobid = 'Owner') then
但我不知道是什么语法使它起作用
谢谢 如果我正确理解了您的请求,您有一个要添加的内容表,您想删除其中的一些内容 以下查询结构实现了这一点:
with toadd (
select *
from <things to add> tad
where tad.guidrequirementid not in (select guidrequirementid from <view>)
)
insert into <final table>
select * from toadd
如果我正确理解了您的请求,那么您有一个要添加的内容表,并且希望删除其中的一些内容 以下查询结构实现了这一点:
with toadd (
select *
from <things to add> tad
where tad.guidrequirementid not in (select guidrequirementid from <view>)
)
insert into <final table>
select * from toadd
根据您使用的数据库类型,可能有更好的方法来实现这一点,但类似的方法应该可以做到这一点
-- get dummy rows for all distinct identifiers that don't already have an owner
select
distinct [Unique Identifier], [office], [number], [description],
1 as value,
'Not Assigned' as Customer,
'Owner' as strjobid from ViewTeamMembers vtm
where
not exists (select 1 from ViewTeamMembers vtm2
where vtm2.[Unique Identifier] = vtm.[Unique Identifier]
and StrJobId = 'Owner')
union all -- add everything already there
select
[Unique Identifier], [office], [number], [description],
[value], [customer], [strjobid]
from ViewTeamMembers
根据您使用的数据库类型,可能有更好的方法来实现这一点,但类似的方法应该可以做到这一点
-- get dummy rows for all distinct identifiers that don't already have an owner
select
distinct [Unique Identifier], [office], [number], [description],
1 as value,
'Not Assigned' as Customer,
'Owner' as strjobid from ViewTeamMembers vtm
where
not exists (select 1 from ViewTeamMembers vtm2
where vtm2.[Unique Identifier] = vtm.[Unique Identifier]
and StrJobId = 'Owner')
union all -- add everything already there
select
[Unique Identifier], [office], [number], [description],
[value], [customer], [strjobid]
from ViewTeamMembers