Tôi cố gắng tạo bảng tổng hợp chỉ bao gồm các chuỗi.cách thay thế giá trị NULL trong bảng tổng hợp?
Đây là một phiên bản đơn giản của bàn của tôi:
CREATE TABLE SecurityGroup (GroupName VARCHAR(20), SecLevel VARCHAR(20), Power VARCHAR(20))
INSERT INTO SecurityGroup
SELECT 'GroupA','Level1','read'
UNION
SELECT 'GroupA','Level2','write'
UNION
SELECT 'GroupA','Level3','read'
UNION
SELECT 'GroupA','Level4','read'
UNION
SELECT 'GroupA','Level4','write'
Tôi muốn sử dụng chức năng PIVOT để có được những ResultSet sau
vọng
GroupName Level1 Level2 Level3 Level4
GroupA read write read read
GroupA read write read write
Tôi có vấn đề là các giá trị cho Level1 - Level3 chỉ tồn tại 1 lần, trong khi Level4 có 2 giá trị khác nhau. Vì vậy, tôi luôn nhận được ResultSet này:
Reality
GroupName Level1 Level2 Level3 Level4
GroupA read write read read
GroupA NULL NULL NULL write
Tôi đang sử dụng mã này
SELECT
[GroupName],
[Level1],
[Level2],
[Level3],
[Level4]
FROM
(SELECT
[GroupName],
[SecLevel],
[Power],
ROW_NUMBER() OVER(PARTITION BY [GroupName], [SecLevel] ORDER BY [Power]) AS rn
FROM [SecurityGroup]) AS SourceTable
PIVOT
(MAX([Power])
FOR [SecLevel]
IN ([Level1], [Level2], [Level3], [Level4])
) AS PivotTable
Bất kỳ ý tưởng làm thế nào để sửa lỗi này? Tôi không thể thêm nhiều giá trị hơn cho Level1 - Level3 trong bảng nguồn.
Tôi đã cố gắng sử dụng RANK() thay vì ROW_NUMBER() nhưng nó không hoạt động.
Cảm ơn sự giúp đỡ của bạn.
Một nỗi đau để viết, nhưng ý tưởng của tôi là sử dụng bảng CTE hoặc tạm thời mà bạn thêm giá trị cho Level1 - Level3, sau đó chọn từ CTE thay vì bảng. Bảng thực tế không cần phải thay đổi. Có phải là một cái gì đó thanh lịch hơn, nhưng tôi không đến với nó. –
xem kết quả đầu vào đã đặt PIVOT của bạn đang trả lại kết quả chính xác! về cơ bản bạn có hai nhóm khác nhau mặc dù cả hai đều được đặt tên là GroupA. người ta có một giá trị cho tất cả 4 cấp độ và một chỉ có cho cấp 4. –
btw, tại sao bạn tạo ra một RowNumber và không sử dụng nó ở bất cứ đâu? –