Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

पंक्तियों के साथ तालिकाओं में शामिल हों

यदि आपके पास केवल कुछ ही पद हैं, तो आप इसे PIVOT . के साथ कर सकते हैं कीवर्ड

select
    UserID,
    UserName,
    [1] as Position1,
    [2] as Position2,
    [3] as Position3
from
(
    select
        U.UserID, U.UserName, P.PositionName,
        row_number() over (partition by U.UserID order by P.PositionName) as RowNum
    from Positions_Users as PU
        inner join Positions as P on P.PositionID = PU.PositionID
        inner join Users as U on U.UserID = PU.UserID
) as P
    pivot
    (
        min(P.PositionName)
        for P.RowNum in ([1], [2], [3])
    ) as PIV

SQL FIDDLE

यदि, हालांकि, आप स्तंभों की एक गतिशील संख्या चाहते हैं, तो आपको गतिशील SQL का उपयोग करना होगा, जैसे कि

declare @stmt nvarchar(max), @stmt_columns1 nvarchar(max), @stmt_columns2 nvarchar(max)
declare @Temp_Data table (RowNum nvarchar(max))

insert into @Temp_Data
select distinct row_number() over (partition by U.UserID order by P.PositionName) as RowNum
from Positions_Users as PU
    inner join Positions as P on P.PositionID = PU.PositionID
    inner join Users as U on U.UserID = PU.UserID

select @stmt_columns1 = stuff((select ', [' + RowNum + ']' from @Temp_Data for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '')
select @stmt_columns2 = stuff((select ', [' + RowNum + '] as Position' + RowNum from @Temp_Data for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '')

select @stmt = '
select
    UserID,
    UserName,' + @stmt_columns2 + '
from
(
    select
        U.UserID, U.UserName, P.PositionName,
        row_number() over (partition by U.UserID order by P.PositionName) as RowNum
    from Positions_Users as PU
        inner join Positions as P on P.PositionID = PU.PositionID
        inner join Users as U on U.UserID = PU.UserID
) as P
    pivot
    (
        min(P.PositionName)
        for P.RowNum in (' + @stmt_columns1 + ')
    ) as PIV'

exec sp_executesql @stmt = @stmt

SQL FIDDLE




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL में अलग-अलग लंबाई के पैटर्न खोजने के लिए PATINDEX का उपयोग करना

  2. चयन से एक तालिका बनाने का प्रयास करें - एसक्यूएल सर्वर 2008 त्रुटि फेंकता है

  3. SQL सर्वर केस एक्सप्रेशन

  4. चयन प्रश्नों पर SQL सर्वर लॉक को समझना

  5. सबक्वेरी में ऑर्डर के साथ एसक्यूएल त्रुटि