[ad_1]
USER TABLE ========== USER_ID USER_NAME 1150080 XXXXXXXXXXXX 1150081 YYYYYYYYYYYY 1150082 ZZZZZZZZZZZZ 1150083 RRRRRRRRRRRR 1150084 WWWWWWWWWWWW 1150085 TTTTTTTTTTTT 1150086 EEEEEEEEEEEE 1150087 QQQQQQQQQQQQ ROLE TABLE ============ ROLE_ID ROLE_NAME 1 AAAAAAAAA 2 CCCCCCCCC 3 RRRRRRRRR 4 TTTTTTTTT 5 UUUUUUUUU 6 YYYYYYYYY 7 IIIIIIIII USERROLE TABLE =============== USER_ID ROLE_ID 1150080 1 1150080 2 1150081 1 1150083 1 1150083 7 REQURIED RESAULT USER_ID USER_NAME ROLE_ID 1 2 3 4 5 6 7 1150080 XXXXXXXXXXXX ✓ ✓ * * * * * 1150081 YYYYYYYYYYYY * ✓ * * * * * 1150082 ZZZZZZZZZZZZ * * * * * * * 1150083 RRRRRRRRRRRR ✓ * * * * * ✓ 1150084 WWWWWWWWWWWW * * * * * * * 1150085 TTTTTTTTTTTT * * * * * * * 1150086 EEEEEEEEEEEE * * * * * * * 1150087 QQQQQQQQQQQQ * * * * * * *
Những gì tôi đã thử:
select SUSER.USER_ID,SUSER.USER_NAME,SUSERROLE.ROLE_ID,SROLEDETAIL.PRODUCT_ID,SPRODUCT.PRODUCT_NAME,SROLEDETAIL.FUNCTION_ID,SFUNCTION.FUNCTION_NAME from SUSER full join SUSERROLE on SUSER.USER_ID = SUSERROLE.USER_ID full join SROLEDETAIL on SUSERROLE.ROLE_ID =SROLEDETAIL.ROLE_ID full join SFUNCTION on SROLEDETAIL.FUNCTION_ID= SFUNCTION.FUNCTION_ID FULL JOIN SPRODUCT ON SROLEDETAIL.PRODUCT_ID =SPRODUCT.PRODUCT_ID
Giải pháp 1
CHÀO,
Dù sao đi nữa bạn cũng có thể sử dụng PIVOT và đạt được điều này. Nếu ROLE_ID bị giới hạn, bạn có thể sử dụng giá trị tĩnh trong truy vấn của mình. Nhưng nếu nó không bị giới hạn thì bạn có thể phải tạo truy vấn PIVOT một cách linh hoạt và thực thi nó.
Btw, kết quả của bạn hơi sai lệch. Ví dụ: người dùng ‘1150081’ không có ROLE_ID ‘2’, thay vào đó phải là ‘1’. Tôi đoán đó là một lỗi đánh máy.
SQL
;WITH SourceQuery AS ( SELECT UT.[USER_ID] ,[UT].[USER_NAME] ,[ROLE_ID] FROM USER_TABLE AS [UT] LEFT JOIN USERROLE_TABLE AS [UR] ON UT.[USER_ID] = [UR].[USER_ID] ) SELECT [USER_ID] ,[USER_NAME] ,IIF([1] IS NULL, N'',N'Y') AS [1] ,IIF([2] IS NULL, N'',N'Y') AS [2] ,IIF([3] IS NULL, N'',N'Y') AS [3] ,IIF([4] IS NULL, N'',N'Y') AS [4] ,IIF([5] IS NULL, N'',N'Y') AS [5] ,IIF([6] IS NULL, N'',N'Y') AS [6] ,IIF([7] IS NULL, N'',N'Y') AS [7] FROM SourceQuery AS Src PIVOT ( MAX(ROLE_ID) FOR ROLE_ID IN ( [1],[2],[3],[4],[5],[6],[7] ) ) AS PVT ORDER BY [USER_ID]
Tôi đã sử dụng “Y” và “” thay vì dấu kiểm và dấu hoa thị vì nó sẽ không hiển thị chính xác trong ngăn giải pháp.
Hy vọng nó sẽ giúp bạn.
[ad_2]
コメント