Sql server MS SQL Server查询将多行合并为一行

Sql server MS SQL Server查询将多行合并为一行,sql-server,Sql Server,正在尝试为模拟人员的数据库编写查询。这些人在组织中担任职位,因此他们在职位表中有多个条目。我还加入了包含电子邮件、地址和电话信息的表格 我的原始查询与此类似 SELECT P.ID , N.FIRST , N.MIDDLE , N.LAST , A.AD1 , A.AD2 , A.AD3 , A.CITY , A.STATE , A.ZIP , A.COUNTRY , PH.NUMBER ,

正在尝试为模拟人员的数据库编写查询。这些人在组织中担任职位,因此他们在职位表中有多个条目。我还加入了包含电子邮件、地址和电话信息的表格

我的原始查询与此类似

SELECT 
    P.ID
    , N.FIRST
    , N.MIDDLE
    , N.LAST
    , A.AD1
    , A.AD2
    , A.AD3
    , A.CITY
    , A.STATE
    , A.ZIP
    , A.COUNTRY
    , PH.NUMBER
    , PH.TYPE
    , E.TYPE
    , E.ADDRESS
FROM
    PERSON AS P
    JOIN NAME AS N ON P.ID=N.ID,
    JOIN ADDRESS AS A ON P.ID=A.ID,
    JOIN PHONE AS PH ON P.ID=PH.ID,
    JOIN EMAIL AS E ON P.ID=E.ID
我想将
POSITION
表连接到此查询上,但我希望将
POSITION
表中的每一行附加到查询中的行,而不是连接导致原始查询为
POSITION
表中的每一行

position表的查询仅针对第一次查询返回的每一行,
select*from position as Pos,其中Pos.ID={p.ID}
其中p.ID来自第一次查询

正常结果应如下所示:

您会如何考虑将订单记录与订单上的项目连接起来。我认为这应该是一个联盟

但当我加入位置表时得到的结果如下:


这可能吗?已经找了好几天了。

试试这个,不确定加入条件和列名,假设如下:

个别栏目的更新——假设每个人只有两个职位头衔

SELECT *, SUBSTRING(POS_TITLE,0,CHARINDEX(',',POS_TITLE,0)) as POS1_Title, SUBSTRING(POS_TITLE,CHARINDEX(',',POS)+1,LEN(POS_TITLE)) as POS2_Title
FROM
(
SELECT 
    P.ID
    , N.FIRST
    , N.MIDDLE
    , N.LAST
    , A.AD1
    , A.AD2
    , A.AD3
    , A.CITY
    , A.STATE
    , A.ZIP
    , A.COUNTRY
    , PH.NUMBER
    , PH.TYPE
    , E.TYPE
    , E.ADDRESS
    ,STUFF(
    (SELECT ','+title FROM POSITIONS as P WHERE P.PositionId = N.PositionId FOR XML PATH('')),1,1,'') as POS_TITLE
FROM
    PERSON AS P
    INNER JOIN NAME AS N ON P.ID=N.ID,
    INNER JOIN ADDRESS AS A ON P.ID=A.ID,
    INNER JOIN PHONE AS PH ON P.ID=PH.ID,
    INNER JOIN EMAIL AS E ON P.ID=E.ID
    INNER JOIN POSITIONS AS N ON N.ID = A.ID
GROUP BY P.ID
    , N.FIRST
    , N.MIDDLE
    , N.LAST
    , A.AD1
    , A.AD2
    , A.AD3
    , A.CITY
    , A.STATE
    , A.ZIP
    , A.COUNTRY
    , PH.NUMBER
    , PH.TYPE
    , E.TYPE
    , E.ADDRESS
) as A

请发布示例数据、您尝试过的内容等。此链接应该可以帮助您:我不理解
查询为每一行提供单独的行
您是指列吗?添加一些数据样本和预期结果是的,这是可能的。这取决于您是想要一列位置值类似于a,还是想要一个。。。如位置1、位置2等。。。正如@Horaciux所述,样本数据和预期输出。不管怎样,你的问题是与我的评论相关的两个问题中的一个问题的重复。请分享你在“位置”表中使用的连接条件。正在制作小提琴供大家查看。无法将实际数据用于匿名目的。这有效!我可以让所有的专栏都有,但有个问题。如果您希望每个标题都有单独的字段,而不是创建一个逗号分隔的列表,您将如何做到这一点?哦,对不起,没有注意到您想要的输出。然后您可能需要
PIVOT
CASE当
语句时,我正在处理它。@ChrisRutherford,检查我的更新,每个人最多有2个位置,不要认为它可能是PIVOT:(在这种情况下,最好是用逗号分隔的列表。有大量的职位供你选择。)people@ChrisRutherford,是的,唯一的问题是位置总数是一个动态值。