Sql 如何在同一个表中找到两个标准的记录,并将它们显示在不同列名下的同一行中

Sql 如何在同一个表中找到两个标准的记录,并将它们显示在不同列名下的同一行中,sql,Sql,我一直在努力解决这个sql问题,对于一个数据库人员来说,这个问题可能很容易解决,但我一直无法集中精力解决这个问题。我创建了一个到表本身的自连接,并使用了一个不同的语句,但没有运气 下面是我试图实现的一个图表视图。如果有人也能给我一个方向,为什么这一切也将是伟大的。谢谢 对于我的标准,我只想选择表中同时包含“IL”和“ND”代码的用户名。如果他们只有“IL”而没有“ND”,那么他们应该 不能包含在我的数据集中。在获得这些帐户后,我想在一行中显示这些信息,如下所示 如果他们有超过2个或更多的IL或N

我一直在努力解决这个sql问题,对于一个数据库人员来说,这个问题可能很容易解决,但我一直无法集中精力解决这个问题。我创建了一个到表本身的自连接,并使用了一个不同的语句,但没有运气

下面是我试图实现的一个图表视图。如果有人也能给我一个方向,为什么这一切也将是伟大的。谢谢

对于我的标准,我只想选择表中同时包含“IL”和“ND”代码的用户名。如果他们只有“IL”而没有“ND”,那么他们应该 不能包含在我的数据集中。在获得这些帐户后,我想在一行中显示这些信息,如下所示 如果他们有超过2个或更多的IL或ND帐户,我只想选择其中一个来显示

 username     Code      MyAcctNumber
------------------------------------
user1        IL         10277
user1        ND         19754
user1        BD         19542
user3        IL         10377
user4        IL         10477
user4        ND         18756
user4        ND         19854
user4        NF         18745
user5        IL         95423
user5        ND         74152
user5        BC         18745
下面是我的结果集表格的样子

username       NDAcctNumer      ILAccNumber
------------------------------------------
user1          19754            10277
user4          18756            10477 
user5          74152            95423

您可以使用用户
与表本身进行内部联接
,以实现此目的,类似于:

select 
    a.username as username, min(a.myacctnumber) as NDAcctNumer, min(b.myacctnumber) as ILAccNumber 
from 
    Table1 a
inner join 
    (
          select 
              username, code, myacctnumber 
          from 
              Table1 
          where 
              code = 'IL'
          group by 
              username, code, myacctnumber
    ) b 
    on 
        a.username = b.username
where 
    a.code = 'ND'
group by 
    a.username
order by
    username asc
这将导致:

------------------------------------------------------
|   username   |    NDAcctNumer   |    ILAccNumber   |
|----------------------------------------------------|
|    user1     |      19754       |      10277       |
|    user4     |      18756       |      10477       |
|    user5     |      74152       |      95423       |
------------------------------------------------------


你可以参考这个来尝试一下。

我正在打电话,请原谅我的打字错误

您可以使用
groupby
将每个
username
的记录压缩到一行

然后,您可以使用
MIN()
CASE
语句来选择每个字段

SELECT
    username,
    MIN(CASE code WHEN 'ND' THEN myacctnumber END)  AS NDAcctNumber,
    MIN(CASE code WHEN 'IL' THEN myacctnumber END)  AS ILAcctNumber
FROM
    YourTable
GROUP BY
    username
如果您确实必须排除只有一个或其他账号的案例,您可以围绕上面的一个外部查询,或者使用append a
HAVING
子句

HAVING
        MAX(CASE code WHEN 'ND' THEN 1 END) = 1
    AND MAX(CASE code WHEN 'IL' THEN 1 END) = 1
这就避免了对可能昂贵的联接的需要


但是,如果您知道只有很小比例的用户名同时具有这两种帐户类型,那么JOIN版本可能会更快。(过滤到非常少的行数,然后加入。)

我会先选择一个数据库并坚持使用它(即不要标记MySQL和SQL Server-请选择一个…)请不要使用不适用于您的问题的标记。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请仅添加您实际使用的数据库的标记Tanks Satish。这个解决方案对于我为什么没有解决我的问题来说非常有意义~W