Tôi đang cố gắng nhóm các giá trị cột theo một cột cụ thể bằng cách sử dụng FOR XML PATH('')
trong TSQL. Đây là kết quả trong cả hai trường hợp (lưu ý rằng không có XML mã - ví dụ: SELECT * FROM @xml
- là giống như với mã XML):TSQL: FOR XML PATH ('') Không thành nhóm
Class | Animals
=================================
Asteroidea | Starfish
Mammalia | Dog
Mammalia | Cat
Mammalia | Coyote
Reptilia | Crocodile
Reptilia | Lizard
Theo this article và this article (lưu ý rằng bài viết thứ hai lá ra GROUP BY
, mà tôi chắc chắn về cách tác giả cố gắng kéo này off mà không có nó - tôi đã thử và nó chỉ tạo ra tất cả các giá trị), cú pháp nên được như hình dưới đây này:
DECLARE @xml TABLE(
Animal VARCHAR(50),
Class VARCHAR(50)
)
INSERT INTO @xml
VALUES ('Dog','Mammalia')
, ('Cat','Mammalia')
, ('Coyote','Mammalia')
, ('Starfish','Asteroidea')
, ('Crocodile','Reptilia')
, ('Lizard','Reptilia')
SELECT x1.Class
, STUFF((SELECT ',' + x2.Animal AS [text()]
FROM @xml x2
WHERE x1.Animal = x2.Animal
ORDER BY x2.Animal
FOR XML PATH('')),1,1,'') AS "Animals"
FROM @xml x1
GROUP BY Class
Sau một vài giờ, giữa các ví dụ này và mã ở trên, tôi không thấy mình sai về cú pháp, nhưng tôi nhận được ror "Cột" @ xml.Animal 'không hợp lệ trong danh sách chọn vì nó không được chứa trong hàm tổng hợp hoặc mệnh đề GROUP BY. " Lưu ý rằng nếu tôi bỏ qua mệnh đề GROUP BY, nó vẫn không tạo ra các giá trị theo cách thích hợp. Một bộ mắt khác sẽ hữu ích.