Sql server 需要使用TSQL创建查询的帮助吗

Sql server 需要使用TSQL创建查询的帮助吗,sql-server,database,tsql,Sql Server,Database,Tsql,我有一个具有以下结构和数据的表: ID_A | ID_B A 1 A 2 B 1 B 2 C 1 C 3 D 1 D 2 D 3 我需要找到不同的B集合,它们存在于给定的A id中。在本例中,结果为: 1,2 1,3 1,2,3 如果我也能数到,那就太好了: 1,2[2] 1,3[1] 1,2,3[1] 我希望这个问题是清楚的。谢谢 MS SQL Server 2012架构设置: cr

我有一个具有以下结构和数据的表:

ID_A | ID_B
 A      1
 A      2
 B      1
 B      2
 C      1
 C      3
 D      1
 D      2
 D      3
我需要找到不同的B集合,它们存在于给定的A id中。在本例中,结果为:

  • 1,2
  • 1,3
  • 1,2,3
  • 如果我也能数到,那就太好了:

  • 1,2[2]
  • 1,3[1]
  • 1,2,3[1]
  • 我希望这个问题是清楚的。谢谢

    MS SQL Server 2012架构设置

    create table YourTable
    (
      ID_A char(1),
      ID_B int
    )
    
    insert into YourTable values
    ( 'A',      1),
    ( 'A',      2),
    ( 'B',      1),
    ( 'B',      2),
    ( 'C',      1),
    ( 'C',      3),
    ( 'D',      1),
    ( 'D',      2),
    ( 'D',      3)
    
    select T.ID_B,
           count(*) as C
    from
      (
      select T1.ID_A,
             (
             select ','+cast(T2.ID_B as varchar(10))
             from YourTable as T2
             where T2.ID_A = T1.ID_A
             order by T2.ID_B
             for xml path(''), type
             ).value('substring(text()[1], 2)', 'varchar(max)') as ID_B
      from YourTable as T1
      group by T1.ID_A
      ) as T
    group by T.ID_B
    
    |  ID_B | C |
    -------------
    |   1,2 | 2 |
    | 1,2,3 | 1 |
    |   1,3 | 1 |
    
    查询1

    create table YourTable
    (
      ID_A char(1),
      ID_B int
    )
    
    insert into YourTable values
    ( 'A',      1),
    ( 'A',      2),
    ( 'B',      1),
    ( 'B',      2),
    ( 'C',      1),
    ( 'C',      3),
    ( 'D',      1),
    ( 'D',      2),
    ( 'D',      3)
    
    select T.ID_B,
           count(*) as C
    from
      (
      select T1.ID_A,
             (
             select ','+cast(T2.ID_B as varchar(10))
             from YourTable as T2
             where T2.ID_A = T1.ID_A
             order by T2.ID_B
             for xml path(''), type
             ).value('substring(text()[1], 2)', 'varchar(max)') as ID_B
      from YourTable as T1
      group by T1.ID_A
      ) as T
    group by T.ID_B
    
    |  ID_B | C |
    -------------
    |   1,2 | 2 |
    | 1,2,3 | 1 |
    |   1,3 | 1 |
    

    create table YourTable
    (
      ID_A char(1),
      ID_B int
    )
    
    insert into YourTable values
    ( 'A',      1),
    ( 'A',      2),
    ( 'B',      1),
    ( 'B',      2),
    ( 'C',      1),
    ( 'C',      3),
    ( 'D',      1),
    ( 'D',      2),
    ( 'D',      3)
    
    select T.ID_B,
           count(*) as C
    from
      (
      select T1.ID_A,
             (
             select ','+cast(T2.ID_B as varchar(10))
             from YourTable as T2
             where T2.ID_A = T1.ID_A
             order by T2.ID_B
             for xml path(''), type
             ).value('substring(text()[1], 2)', 'varchar(max)') as ID_B
      from YourTable as T1
      group by T1.ID_A
      ) as T
    group by T.ID_B
    
    |  ID_B | C |
    -------------
    |   1,2 | 2 |
    | 1,2,3 | 1 |
    |   1,3 | 1 |
    

    和您是否有正在使用但不起作用的SQL?你看,我们不是来为你写软件的,我们是来互相帮助调试我们一直坚持的东西的。@MichaelPerrenoud:也许你不是来为别人写软件的,但在过去我请求过这样的帮助,我得到了。我不知道从哪里开始查询,所以除了搔搔头,我什么也没试过。以所有其他SO用户的名义说话可能太多了……问这样的问题,你没有遵守这个社区制定的规则和条例。请请注意“做你的家庭作业”部分。@MichaelPerrenoud:如果我需要帮助来理解它是如何工作的,我会问你的,谢谢。顺便说一句,我比你早了三年左右就开始抱怨了。@MichaelPerrenoud:让我告诉你,只有一个抱怨(你的),答案就在这里,所以对其他人来说,这似乎是一个合理的问题……哇,太棒了!即使有两条生命,我也没能以这样的事情结束:谢谢。