简体   繁体   中英

How to fetch rows in column manner in sql?

I have a record in my table like

memberId    PersonId    Year
4057        1787         2
4502        1787         3

I want a result from a query like this

memberId1   MemberId2   PersonId
4057        4502        1787

How to write a query ??

不要在查询中执行此操作,而应在应用程序层中执行此操作。

Don't do this in SQL. At best you can try:

SELECT table1.memberId memberId1, table2.memberId MemberId2, PersonId
FROM table table1 JOIN table table2 USING (PersonId)

But it won't do what you expect if you have more than 2 Members for a person. (It will return every possible combination.)

Below an example on how to do it directly in SQL. Mind that there is plenty of room for optimisation but this version should be rather fast, esp if you have an index on PersonID and year.

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 

if you want all member ids for each person_id, you could use [for xml path] statement (great functionality) to concat all memberId s in a string

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

resulting in:

PersonId   Members Ids
1787      ' 4057 4502'

if you really need seperate columns, with unlimited number of memberIds, consider using a PIVOT table, but far more complex to use

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM