当右表中有2条记录时返回单行

时间:2010-05-06 06:26:36

标签: sql-server-2005

我有两个相关的sql server表... TableA和TableB。

***TableA - Columns***
TableA_ID     INT
VALUE         VARCHAR(100)

***TableB - Columns***
TableB_ID     INT
TableA_ID     INT
VALUE         VARCHAR(100)

对于TableA中的每条记录,TableB中都有始终 2条记录。因此,TableA与TableB具有一对多的关系。

如何编写单个sql语句来连接这些表,并为TableA中的每一行返回一行,其中包括:

  • 表B
  • 第一个相关行中VALUE列的列
  • 表B中 second 相关行中VALUE列的列?

1 个答案:

答案 0 :(得分:2)

对于2个相关记录,这很容易。加入表B两次:

SELECT 
  A.TableA_ID,
  A.VALUE      AS VALUE_A
  B1.VALUE     AS VALUE_B1
  B2.VALUE     AS VALUE_B2
FROM
  TableA AS A
  INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID
  INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID
WHERE
  B1.TableB_ID < B2.TableB_ID

如果表B中有一列确定什么是“第一个值”,什么是“第二个值”,这就更容易了(对于表B中的N列,它会像这样工作,只需添加更多连接) :

SELECT 
  A.TableA_ID,
  A.VALUE      AS VALUE_A
  B1.VALUE     AS VALUE_B1
  B2.VALUE     AS VALUE_B2
FROM
  TableA AS A
  INNER JOIN TableB B1 ON B1.TableA_ID = A.TableA_ID AND B1.Type = '1'
  INNER JOIN TableB B2 ON B2.TableA_ID = A.TableA_ID AND B2.Type = '2'

TableB(TableA_ID, Type)的综合索引有助于此加入。