0

私は2つのテーブルを持っています。

  • 表:スケジュール(SID,ORID

  • 表:オーク(ORID,ORNAME

ORNAME特定のSIDに割り当てられているかどうかをすべて表示したい。

期待される出力:

   SID   OR1 OR2 OR3 OR4
    1     1             
    2             3
    3         2

上記では、SID1 にはORID= 1 が含まれ、SID2 にはORID= 3SIDが含まれ、3 にはORID= 2 が含まれます。

4

1 に答える 1

0

必要なのは、 の任意の数の可能な値をサポートする動的ピボットですORNAME

DECLARE @cols VARCHAR(1000) = STUFF(
(
SELECT  ',['+ORNAME+']'
FROM    ORC
FOR XML PATH('')
), 1, 1, '')

DECLARE @sql VARCHAR(3000) =
'
SELECT  pvt.SID,
        '+@cols+'
FROM    Schedule a
LEFT JOIN   
        ORC b ON a.ORID = b.ORID
PIVOT   (
    MAX(b.ORID) FOR b.ORNAME IN ('+@cols+')
) pvt
ORDER BY pvt.SID'

EXEC(@sql)

ここにSQLフィドルがあります

于 2012-12-18T09:12:41.530 に答える