我的表中有一条记录,如
memberId PersonId Year
4057 1787 2
4502 1787 3
我想要一个像这样的查询的结果
memberId1 MemberId2 PersonId
4057 4502 1787
如何编写查询??
答案 0 :(得分:2)
请勿在查询中执行此操作,请在应用程序层中执行此操作。
答案 1 :(得分:1)
不要在SQL中执行此操作。充其量你可以尝试:
SELECT table1.memberId memberId1, table2.memberId MemberId2, PersonId
FROM table table1 JOIN table table2 USING (PersonId)
但是,如果一个人拥有超过2个会员,那么它将无法满足您的期望。 (它将返回所有可能的组合。)
答案 2 :(得分:0)
下面是一个如何在SQL中直接执行此操作的示例。请注意,有足够的优化空间,但这个版本应该相当快,特别是如果你有PersonID和年份的索引。
SELECT DISTINCT PersonID,
memberId1 = Convert(int, NULL),
memberId2 = Convert(int, NULL)
INTO #result
FROM myTable
WHERE Year IN (2 , 3)
CREATE UNIQUE CLUSTERED INDEX uq0_result ON #result (PersonID)
UPDATE #result
SET memberId1 = t.memberId
FROM #result upd
JOIN myTable t
ON t.PersionId = upd.PersonID
AND t.Year = 2
UPDATE #result
SET memberId2 = t.memberId
FROM #result upd
JOIN myTable t
ON t.PersionId = upd.PersonID
AND t.Year = 3
SELECT * FROM #result
答案 3 :(得分:0)
如果你想要每个person_id的所有成员ID,你可以使用[for xml path]语句(强大的功能) 将所有memberId连接成一个字符串
select distinct PersonId
, (select ' '+cast(t0.MemberId as varchar)
from table t0
where t0.PersonId=t1.PersonId
for xml path('')
) [Member Ids]
from table t1
导致:
PersonId Members Ids
1787 ' 4057 4502'
如果你真的需要单独的列,无限数量的memberIds,请考虑使用 一个PIVOT表,但使用起来要复杂得多