Sql 使用多个select命令返回不完整的结果,并将其放入单独的列中

Sql 使用多个select命令返回不完整的结果,并将其放入单独的列中,sql,sql-server,Sql,Sql Server,我有一张这样的桌子: NAMES STATUS AMY Existing Bob Added 预期结果将是: Existing Added Removed Amy Bob 但是,结果是空的: Existing Added Removed 如果删除表c的select,将显示表a和表b的结果。我的SELECT语句有什么问题 更新: 在Gordan的帮助下,我的优化查询现在看起来是这样的,它得到了我想要的结果,但不是完全按照

我有一张这样的桌子:

  NAMES STATUS
  AMY   Existing
  Bob   Added
预期结果将是:

    Existing    Added   Removed
    Amy         Bob
但是,结果是空的:

Existing    Added   Removed
如果删除表c的select,将显示表a和表b的结果。我的SELECT语句有什么问题

更新: 在Gordan的帮助下,我的优化查询现在看起来是这样的,它得到了我想要的结果,但不是完全按照我想要的顺序

select (case when [STATUS] = 'Existing' then [NAME] end) as existing,
       (case when [STATUS] = 'Added' then [NAME] end) as added,
       (case when [STATUS] = 'Removed' then [NAME] end) as removed    
from (select [STATUS], [NAME]
      from e
      ) a
结果:

existing    added   removed
AMY         NULL    NULL
NULL        Bob     NULL

我怀疑您想要条件聚合:

select max(case when status = 'Existing' then name end) as existing,
       max(case when status = 'Added' then name end) as added,
       max(case when status = 'Removed' then name end) as removed      
from (select e.*,
             row_number() over (partition by status order by status) as seqnum
      from e
     ) e
group by seqnum;

我怀疑您想要条件聚合:

select max(case when status = 'Existing' then name end) as existing,
       max(case when status = 'Added' then name end) as added,
       max(case when status = 'Removed' then name end) as removed      
from (select e.*,
             row_number() over (partition by status order by status) as seqnum
      from e
     ) e
group by seqnum;

本网站中的SQL表示SQL为标准(ANSI/ISO SQL标准)。。此SQL将是SQL Server(MSSQL)、SQLite、MariaDB(带),请标记正确的。。但我注意到
dbo
我假设您使用的是SQL Server(MSSQL)我假设您表中的status列没有唯一的键?或者表根本没有唯一的键?也许最好包括CREATE TABLE结构。@RaymondNijland这只是一个代码片段,这个查询将是更大逻辑的一部分。谢谢你的评论。顺便问一下,有没有涉及到应用程序代码(编程语言)?由于数据显示问题通常会在应用程序中得到解决。本网站中的SQL表示SQL为LAUGUE(ANSI/ISO SQL标准)。。此SQL将是SQL Server(MSSQL)、SQLite、MariaDB(带),请标记正确的。。但我注意到
dbo
我假设您使用的是SQL Server(MSSQL)我假设您表中的status列没有唯一的键?或者表根本没有唯一的键?也许最好包括CREATE TABLE结构。@RaymondNijland这只是一个代码片段,这个查询将是更大逻辑的一部分。谢谢你的评论。顺便问一下,有没有涉及到应用程序代码(编程语言)?由于数据显示问题通常会在应用程序中得到解决。感谢您提供的提示。我取得了一些成功。没有seqnum和groupby语句,我可以得到我想要的结果,但是每列的顺序是随机的。但是,如果我包含group by,会出现一些错误,a.STATUS、a.NAME不在聚合函数中。“但每列的顺序都是随机的”@BillLau在ANSI/ISO SQL标准中,所有内容都是无序的。。。这意味着您必须使用
ORDER BY
,但当值相等时,结果仍然可以是非皮肤刺激(“随机”)。。意味着要获得皮肤护理(“固定”)订单,您必须在
order BY
中至少包含一列,该列具有唯一的值意味着具有
唯一
键。只要最多只有三个名称,并且每个名称都只有一个列出的状态,并且没有重复的状态。。。但是,如果两个名称的状态为“已添加”,该怎么办?喂,艾米被加上了。然后呢?我知道上面的查询会做什么。对于OP来说,这更像是一个问题:预期结果应该是什么?换句话说@TechGnome这通常是在应用程序代码中完成的,因为主要问题是数据显示问题。我将尝试在应用程序级别上执行此操作。我在探索不同的选择,以找到获得我想要的结果的最佳方式。谢谢你的指点。我取得了一些成功。没有seqnum和groupby语句,我可以得到我想要的结果,但是每列的顺序是随机的。但是,如果我包含group by,会出现一些错误,a.STATUS、a.NAME不在聚合函数中。“但每列的顺序都是随机的”@BillLau在ANSI/ISO SQL标准中,所有内容都是无序的。。。这意味着您必须使用
ORDER BY
,但当值相等时,结果仍然可以是非皮肤刺激(“随机”)。。意味着要获得皮肤护理(“固定”)订单,您必须在
order BY
中至少包含一列,该列具有唯一的值意味着具有
唯一
键。只要最多只有三个名称,并且每个名称都只有一个列出的状态,并且没有重复的状态。。。但是,如果两个名称的状态为“已添加”,该怎么办?喂,艾米被加上了。然后呢?我知道上面的查询会做什么。对于OP来说,这更像是一个问题:预期结果应该是什么?换句话说@TechGnome这通常是在应用程序代码中完成的,因为主要问题是数据显示问题。我将尝试在应用程序级别上执行此操作。我在探索不同的选择,以找到获得我想要的结果的最佳方式。