1

我有一个非常复杂的视图。该查询从大约 14 个表中提取数据,还涉及一个子查询。结果如下:[Unique Identifier][office][number][description][value][customer][strjobid]...

现在,此信息是从名为 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]

我需要对此进行查询,并查看是否存在具有作业ID“所有者”的人的行,如果没有,我需要将我自己的行插入到我的视图中

[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]

这是我的加入

LEFT OUTER JOIN dbo.viewteammembers ON dbo.viewteammembers.guidrequirementid = dbo.tblrequirements.guidrequirementid

我会假设我必须做这样的事情:

select * from viewteammembers case when not exists(select * from viewteammebers where strjobid = 'Owner') then 

但我不知道使这项工作的语法是什么。

谢谢!

4

2 回答 2

1

根据您使用的数据库类型,可能会有更好的方法来做到这一点,但这样的事情应该可以解决问题

   -- 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
于 2012-05-09T14:15:38.643 回答
0

如果我正确理解了您的要求,那么您有一个要添加的内容表,并且您想删除其中的一些内容。

以下查询结构实现了这一点:

with toadd (
    select *
    from <things to add> tad
    where tad.guidrequirementid not in (select guidrequirementid from <view>)
)
insert into <final table>
    select * from toadd
于 2012-05-09T14:13:58.697 回答